命令行如何对iOS应用进行代码签名

3

我正在创建一个命令行工作流来进行我的iOS开发,但我卡在了最后一步:代码签名。

我为armv7和armv7s构建了一个应用程序,链接它并创建应用程序包:

$ codesign -d -v path/to/myapp.app
Executable=/path/to/myapp.app/myapp
Identifier=com.mycompany.myapp
Format=bundle with Mach-O universal (armv7 armv7s)
CodeDirectory v=20200 size=2292 flags=0x0(none) hashes=105+5 location=embedded
Signature size=4332
Signed Time=Sep 7, 2014, 2:47:55 AM
Info.plist entries=26
TeamIdentifier=XXXXXX
Sealed Resources version=2 rules=5 files=3
Internal requirements count=1 size=192

我从这里得到了一个 codesigning hash XXXXX:

$ security find-identity -pcodesigning -v
  1) XXXXX "iPhone Developer: My Name (YYYY)"
     1 valid identities found

然而,当我使用以下代码签名后:
codesign --force -vvvv --sign XXXXX --resource-rules=path/to/myapp.app/ResourceRules.plist --entitlements path/to/myapp.xcent path/to/myapp.app
path/to/myapp.app: replacing existing signature
path/to/myapp.app: signed bundle with Mach-O universal (armv7 armv7s) [com.mycompany.myapp]

它似乎仍然不满意:

$ codesign --verify -vvvv path/to/myapp.app
path/to/myapp.app: invalid Info.plist (plist or signature have been modified)
In architecture: armv7s

作为参考,我使用Xcode构建了一个(类似的)应用程序(实际上我使用了日志中的codesign命令来对该应用程序进行签名),它可以正常运行。
$ codesign --verify -vvvv path/to/otherapp.app
path/to/otherapp.app: valid on disk
path/to/otherapp.app: satisfies its Designated Requirement

我非常确定我有正确的代码签名哈希,因为我已经通过xcode签署和部署了应用程序。我只是试图在命令行上重现相同的步骤,但是失败了。显然,如果我更改了info.plist或其他内容,我会期望看到此错误,但我不希望在执行codesign步骤后立即看到它。这里似乎有一些黑魔法。请问有人能够解释一下或提供一些指示吗?
编辑: 我删除了armv7s并只构建了armv7,现在在codesign验证阶段似乎很顺利,但是我仍然无法使用以下日志中的错误部署应用程序:
installd [26777]:0x10050c000 verify_signer_identity:/var/tmp/install_staging.Mvi7tR/myapp.app/myapp的MISValidateSignatureAndCopyInfo失败:0xe8008019
我不知道发生了什么:\
另一个编辑: 我让codesign验证再次失败了。所以,如果我验证myapp.app,则会显示一切正常。但是,如果我尝试直接验证myapp.app/myapp二进制文件,则会说验证失败(除了架构armv7之外的上述错误)。
1个回答

0
长话短说,如果我对 myapp.app/myapp 进行代码签名而不是仅针对 myapp.app 进行签名,那么我可以将该应用程序部署到我的手机上而没有任何问题。 我似乎无法同时对两者进行代码签名,因为 myapp.app/myapp 或 myapp.app 其中之一会在 codesign --verify 时失败,但现在已经足够好了,因为我可以部署该应用程序。
希望这能帮助那些正在撞墙的人。
我会尝试找出是否可以以某种方式在一行中签署两个应用程序,但这只是一个小的纪念问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接