首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ldid?

如何使用ldid?
EN

Stack Overflow用户
提问于 2012-10-07 10:45:38
回答 3查看 19.7K关注 0票数 9

我试图在iOS 5.1/iPhone4s(越狱)上运行未签名的应用程序。我所做的:

  1. 禁用XCode中的代码签名。
  2. 构建了未签名的iPhone应用程序。
  3. 通过SSH将其复制到我的iPhone上/User/me/development/HelloWorld.app . via
  4. 现在,我尝试模拟它的签名,以便在iPhone上运行这个应用程序。我运行以下命令:

代码语言:javascript
运行
复制
cd /User/me/development
chmod -R 777 HelloWorld.app
ldid -S HelloWorld

但是,我收到以下错误:

代码语言:javascript
运行
复制
util/ldid.cpp(567): _assert(78:arch != NULL)

造成这种错误的可能原因是什么?现在要修正它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 22:03:40

1)使用ldid -S正确的用法。不是小写(-s)。

2)通常,当我遇到这个错误时,这是因为我用错误的架构构建了我的应用程序。我使用过的大多数旧版本的ldid都不能对fat二进制文件进行签名(但请参阅下面的Update )。胖二进制文件中包含多个体系结构。例如,双armv6armv7可执行文件。或者使用Xcode 4.5,它可能默认为armv7armv7s

在项目生成设置中,使用ArchitecturesValid Architecture Build Active architecture Only设置来确定构建了哪个体系结构可执行文件。对于越狱开发,我通常将构建活动架构( Active Architecture )设置为YES。以及设置为armv6armv7的有效结构。

3)还有,一些旧版本的ldid不能对armv7可执行文件进行签名。如果您得到来自KennyTM网站的预制件,它支持armv7。请注意,此ldid是为Mac构建的,因此它设计为在构建之后在Mac上运行可执行文件,而不使用Xcode签名,但在上传到iPhone之前。

较新的手机通常可以运行为较旧架构构建的可执行文件,但不能反过来运行。所以,为您想要支持的最古老的体系结构构建。在较新的体系结构中,您将失去一些优化(大多数人并不太关心这些优化)。让我知道你的应用程序是否需要这些优化,我会发布更多)。

因此,如果您希望支持旧设备( Architectures < 3GS),我会将iPhone设置为仅armv6,确保删除$(ARCHS_STANDARD_32_BIT)的默认设置。如果您只需要支持相对较新的版本,那么选择armv7,但要确保您使用的ldid版本可以对armv7二进制文件进行签名。

编辑:以确定您试图签名的可执行文件是否为fat文件,请在命令行中运行以下命令:

代码语言:javascript
运行
复制
> 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的默认安装位置)。

票数 11
EN

Stack Overflow用户

发布于 2012-11-06 06:57:59

从Xcode 4.5开始,可能早在4.4还没有检查时,为了使用ldid工具进行伪代码签名,您需要从这里下载并安装“命令行工具”,或者可以从Xcode、Preferences->下载

否则您将得到错误,如

  • util/ldid.cpp(584):
  • ./minimal/mapping.h(54):_assert(2:false)
  • util/ldid.cpp(567)
  • 诸若此类

您仍然需要确保它不是"fat“二进制文件,并且只支持armv7,因为不再支持armv6。

-S ExampleApp

票数 3
EN

Stack Overflow用户

发布于 2013-12-23 18:17:11

错误断言(2:false)来自于HelloJB (而不是HelloJB.app)受写保护的事实!

  1. 启动Terminal.app
  2. 转到HelloJB.app目录
  3. chmod +aw HelloJB
  4. -S HelloJB工作!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12768109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档