我试图在iOS 5.1/iPhone4s(越狱)上运行未签名的应用程序。我所做的:
。
cd /User/me/development
chmod -R 777 HelloWorld.app
ldid -S HelloWorld
但是,我收到以下错误:
util/ldid.cpp(567): _assert(78:arch != NULL)
造成这种错误的可能原因是什么?现在要修正它?
发布于 2012-10-07 22:03:40
1)使用ldid -S
的是正确的用法。不是小写(-s
)。
2)通常,当我遇到这个错误时,这是因为我用错误的架构构建了我的应用程序。我使用过的大多数旧版本的ldid
都不能对fat二进制文件进行签名(但请参阅下面的Update )。胖二进制文件中包含多个体系结构。例如,双armv6
和armv7
可执行文件。或者使用Xcode 4.5,它可能默认为armv7
和armv7s
。
在项目生成设置中,使用Architectures,Valid Architecture 和Build Active architecture Only设置来确定构建了哪个体系结构可执行文件。对于越狱开发,我通常将构建活动架构( Active Architecture )设置为到YES
。以及设置为armv6
和armv7
的有效结构。
3)还有,一些旧版本的ldid
不能对armv7
可执行文件进行签名。如果您得到来自KennyTM网站的预制件,它支持armv7
。请注意,此ldid
是为Mac构建的,因此它设计为在构建之后在Mac上运行可执行文件,而不使用Xcode签名,但在上传到iPhone之前。
较新的手机通常可以运行为较旧架构构建的可执行文件,但不能反过来运行。所以,为您想要支持的最古老的体系结构构建。在较新的体系结构中,您将失去一些优化(大多数人并不太关心这些优化)。让我知道你的应用程序是否需要这些优化,我会发布更多)。
因此,如果您希望支持旧设备( Architectures < 3GS),我会将iPhone设置为仅armv6
,确保删除$(ARCHS_STANDARD_32_BIT)
的默认设置。如果您只需要支持相对较新的版本,那么选择armv7
,但要确保您使用的ldid
版本可以对armv7
二进制文件进行签名。
编辑:以确定您试图签名的可执行文件是否为fat文件,请在命令行中运行以下命令:
> cd HelloJB.app
> ls
HelloJB Info.plist PkgInfo date.zip en.lproj
> lipo -info HelloJB
Non-fat file: HelloJB is architecture: armv7
正如您在上面的输出中所看到的,我的HelloJB
可执行文件不是fat文件,只有armv7代码。
更新
我相信,预先构建的我在这里发现的 can现在签署了fat可执行文件,尽管仍然有一些ldid
版本在浮动,这是不能的。此外,我认为如果您安装了最新版本的iOSOpenDev,它将为您提供一个可以签名fat可执行文件的ldid
版本(/opt/iOSOpenDev/bin/ldid
的默认安装位置)。
发布于 2012-11-06 06:57:59
从Xcode 4.5开始,可能早在4.4还没有检查时,为了使用ldid工具进行伪代码签名,您需要从这里下载并安装“命令行工具”,或者可以从Xcode、Preferences->下载
否则您将得到错误,如
您仍然需要确保它不是"fat“二进制文件,并且只支持armv7,因为不再支持armv6。
-S ExampleApp
发布于 2013-12-23 18:17:11
错误断言(2:false)来自于HelloJB (而不是HelloJB.app)受写保护的事实!
https://stackoverflow.com/questions/12768109
复制相似问题