从命令行对ios app进行编码

时间:2014-09-07 20:44:05

标签: ios command-line codesign

我正在为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

我从:

获得了一个代码签名哈希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或其他内容,我希望看到这个错误,但我不希望在执行代码签名步骤后立即看到它。一些黑魔法在这里工作。请问有人可以解决一些问题或帮忙吗?

修改

我删除了armv7s并刚刚构建了armv7,现在看来在代码签署验证阶段很开心,但是我仍然无法从日志中部署应用程序并出现以下错误:

installd [26777]:0x10050c000 verify_signer_identity:/var/tmp/install_staging.Mvi7tR/myapp.app/myapp:0xe8008019

的MISValidateSignatureAndCopyInfo失败

我不知道发生了什么:\

另一个编辑

我的代码签名验证再次失败,嘿。所以,如果我验证myapp.app,那么它表示一切正常。但是,如果我尝试直接验证myapp.app/myapp二进制文件,那么它表示验证失败(除了架构armv7时出现上述错误)

1 个答案:

答案 0 :(得分:0)

长话短说,如果我将myapp.app/myapp与myapp.app配对,那么我可以将应用程序部署到我的手机上,没有任何问题。我似乎无法对两者进行协同编码,因为myapp.app/myapp或myapp.app之一失败了代码签名 - 验证,但现在它已经足够好了,因为我可以部署应用程序。

希望这可以帮助那些正在抨击墙壁的人。

我会试着弄明白我是否可以某种方式在一条线上进行编码,但这是一个次要的后代问题。