Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用ldid?_Iphone_Ios_Xcode_Code Signing_Jailbreak - Fatal编程技术网

Iphone 如何使用ldid?

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) 这种错误的可能原因是什么

我正在尝试在iOS 5.1/iPhone 4s(越狱)上运行未签名的应用程序。我所做的:

  • 禁用XCode中的代码签名

  • 构建未签名的iPhone应用程序

  • 通过SSH将其复制到我的iPhone中的location/User/me/development/HelloWorld.app

  • 现在我尝试模拟它的签名,以便在iPhone上运行此应用程序。我运行以下命令:

  • 但是,我收到以下错误:

    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
    
    正如您在上面的输出中所看到的,my
    HelloJB
    可执行文件不是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)
    • 等等
    您仍然需要确保它不是一个“胖”二进制文件,并且只支持armv7,因为不再支持armv6

    ldid-S ExampleApp

    错误断言(2:false)来自以下事实:HelloJB(不是HelloJB.app)是写保护的

  • 启动Terminal.app
  • 转到目录HelloJB.app
  • chmod+aw HelloJB
  • ldid-S HelloJB工作正常
    @在线,是的。现在这是XCode的默认值。我只是将架构设置为只为
    armv7
    构建,然后让
    ldid
    code对非fat可执行文件进行签名。@spamguy。你能试试其中一个,看看这是否是问题所在吗?或者只需查看您的Xcode构建设置,看看您是否配置为仅为一种体系结构构建?@ItayLevin,如果它只列出
    armv7
    ,那么它不是一个胖二进制文件。CPU类型和子类型只是两个不同的描述符,但是
    armv7
    是我在您发布的内容中看到的唯一体系结构,因此它不是fat。“cputype(12)cpusubtype(11)”是armv7s
    xcrun-sdk iphoneos lipo-info…
    将正确转储该值。雷达的存在是因为
    /usr/bin/lipo
    无法识别处理器和架构。我可以确认更新的ldid似乎对fat二进制文件进行了签名。别忘了使用execute权限对二进制文件进行chmod。最后,如果您没有Mac电脑,您可以使用Travis CI立即完成此操作,稍后将看到。这似乎是一条评论(关于omar的答案?)。。。这个问题没有答案
    util/ldid.cpp(567): _assert(78:arch != NULL)