Iphone 如何使用ldid?
我正在尝试在iOS 5.1/iPhone 4s(越狱)上运行未签名的应用程序。我所做的:Iphone 如何使用ldid?,iphone,ios,xcode,code-signing,jailbreak,Iphone,Ios,Xcode,Code Signing,Jailbreak,我正在尝试在iOS 5.1/iPhone 4s(越狱)上运行未签名的应用程序。我所做的: 禁用XCode中的代码签名 构建未签名的iPhone应用程序 通过SSH将其复制到我的iPhone中的location/User/me/development/HelloWorld.app 现在我尝试模拟它的签名,以便在iPhone上运行此应用程序。我运行以下命令: 但是,我收到以下错误: util/ldid.cpp(567): _assert(78:arch != NULL) 这种错误的可能原因是什么
util/ldid.cpp(567): _assert(78:arch != NULL)
这种错误的可能原因是什么?现在修复它?1)使用ldid-S
是正确的用法。不是小写(-s
)
2)通常,当我遇到这个错误时,是因为我用错误的架构构建了我的应用程序。我使用过的大多数较旧版本的ldid
无法对fat二进制文件进行签名(但请参见下面的更新)。Fat二进制文件是内部具有多个体系结构的文件。例如,双armv6
和armv7
可执行文件。或者对于Xcode 4.5,它可能默认为armv7
和armv7s
在项目构建设置中,使用体系结构、有效体系结构和仅构建活动体系结构设置来确定构建的体系结构可执行文件。对于越狱开发,我通常将仅构建活动架构设置为YES
。并且有效的架构设置为armv6
和armv7
3)此外,一些较旧版本的ldid
无法对armv7
可执行文件进行签名。如果您获得了,它支持armv7
。请注意,此ldid
是为Mac OS X构建的,因此它被设计为在Mac上的可执行文件上运行,在构建后无需登录Xcode,但在上传到iPhone之前
较新的手机通常可以运行为旧体系结构构建的可执行程序,但反过来就不行了。因此,针对您想要支持的最古老的体系结构进行构建。你只会在较新的体系结构中失去一些优化(大多数人并不太关心这些优化…如果你的应用程序需要这些优化,请告诉我,我会发布更多)
因此,如果您想支持旧设备(iPhone<3GS),我会将架构设置为仅armv6
,确保删除$(ARCHS\u标准\u 32位)
的默认设置。如果您只需要相对较新的支持,请选择armv7
,但请确保使用可以对armv7
二进制文件进行签名的ldid
编辑:要确定您尝试签名的可执行文件是否为fat,请在命令行中运行以下命令:
>cd HelloJB.app
>ls
HelloJB Info.plist PkgInfo date.zip en.lproj
>lipo-info HelloJB
非fat文件:HelloJB是体系结构:armv7
正如您在上面的输出中所看到的,myHelloJB
可执行文件不是fat,只有armv7代码
更新
我相信,的预构建版本现在可以签署fat可执行文件,尽管仍有
ldid
版本无法签署。另外,我认为,如果您安装的是最新版本的,它将为您提供一个可以对fat可执行文件进行签名的ldid
(默认安装位置为/opt/ioopendev/bin/ldid
)。从Xcode 4.5开始,可能早在4.4没有检查,以便使用ldid工具进行伪代码签名,您需要从下载并安装“命令行工具”,或者您可以从Xcode、首选项->下载中下载它
否则会出现如下错误
- util/ldid.cpp(584):
- ./minimal/mapping.h(54):\u assert(2:false)
- util/ldid.cpp(567)
- 等等
@在线,是的。现在这是XCode的默认值。我只是将架构设置为只为
armv7
构建,然后让ldid
code对非fat可执行文件进行签名。@spamguy。你能试试其中一个,看看这是否是问题所在吗?或者只需查看您的Xcode构建设置,看看您是否配置为仅为一种体系结构构建?@ItayLevin,如果它只列出armv7
,那么它不是一个胖二进制文件。CPU类型和子类型只是两个不同的描述符,但是armv7
是我在您发布的内容中看到的唯一体系结构,因此它不是fat。“cputype(12)cpusubtype(11)”是armv7sxcrun-sdk iphoneos lipo-info…
将正确转储该值。雷达的存在是因为/usr/bin/lipo
无法识别处理器和架构。我可以确认更新的ldid似乎对fat二进制文件进行了签名。别忘了使用execute权限对二进制文件进行chmod。最后,如果您没有Mac电脑,您可以使用Travis CI立即完成此操作,稍后将看到。这似乎是一条评论(关于omar的答案?)。。。这个问题没有答案
util/ldid.cpp(567): _assert(78:arch != NULL)