使用Windows系统进行IPA文件的代码签名

7
对于未来的一个项目,我需要学习苹果iOS IPA文件(iPhone/iPad)的代码签名过程。我的项目目标是在Delphi中构建一个Windows工具,以对一个IPA文件进行代码签名(之前通过XCode编译时使用“不进行代码签名”)。
有一件确定的事情,就是只有在Windows上才能对IPA文件进行代码签名;就像Adobe使用AIR/Flash CS5一样。此外,Epic Games, Inc.使用第三方工具构建了UDK(Unreal Development Kit)来对IPA文件进行代码签名。
这个最后一个是用C#/.NET编写的,所以我试图探索源代码以了解代码签名过程,但是,哇,代码相当复杂,即使C#/.NET和Delphi之间存在显着的相似性,我也很快就迷失了……
UDK的iPhonePackager非常接近我想要做的事情(功能较少)。
根据我的研究:证书和密钥可以通过命令行使用OpenSSL“生成”;Apple使用X509证书对二进制文件进行代码签名(?);可以使用类似“Bouncy Castle Crypto”APIs的组件来管理证书。

一篇关于苹果代码签名过程的有趣文章: http://developer.apple.com/library/mac/#technotes/tn2206/_index.html

另外,我还需要从移动配置文件生成"CodeResources"、"embedded.mobileprovision"和带有所有文件层次结构的"CodeSignature/CodeResources"。

<key>MainWindow.nib</key>
<data>GTBfZPINlJlD7HXjMRAKgfAztXU=</data>

如果你已经看到这里,你肯定有点头疼了 :)
所以,以下是一些问题作为开始...
是否可以重新签名一个已经编译并用“不要代码签名”签名的二进制文件?
你认为我的项目真的很难吗...?
你认为我最好雇一个开发者吗?我可以为这个项目提供预算,但理想情况下我当然希望自己完成... :D
非常感谢您提前的建议和/或建议。
Beny

对ldid进行一些研究,看看它是否适用于Windows。至少,它可以让您在越狱设备上运行应用程序。 - Richard J. Ross III
嗨,理查德。是的,我已经为越狱设备构建了一个简单的打包程序,但最困难的部分恰恰是对二进制文件进行代码签名... :s 我会在Saurik的LDID周围进行一些研究。谢谢。 - Beny
2个回答

3

我已经编写了一个工具,在Windows上更新移动配置文件并重新签名IPA,您可以在这里找到该工具及其C#源代码(根据LGPL许可证)。


代码编写得非常漂亮,在Windows机器上使用本地.NET而不依赖其他第三方工具即可运行。我自己尝试了几个IPA文件,其中许多在重新签名后都可以正常工作。然而,对于一些IPA文件,在我的iPhone上安装时出现了“IncorrectArchitecture”和“AppexBundleIDNotPrefixed”错误。 - Anshuman Chatterjee

1

我正在开发一个类似的项目,但我找不到UDK工具的源文件,它是开源的吗?如果是,你能给我一个链接吗?

我可以告诉你CodeResources文件使用了base64编码的sha1摘要。 你可以使用openssl创建: openssl dgst -sha1 -binary | openssl enc -base64


谢谢Fabio的建议,我会尝试使用OpenSSL DGST函数;)将来我会继续关注这个问题。最好的祝福。 - Beny
UDK签名工具怎么样?你有源代码的链接吗? - Fabio
UDK iPhone Packager非常好,但对我来说有点复杂。在这里看看:http://shrtnr.us/9vi9ju - Beny
UDK的iPhonePackager有点过时了,源代码可以在这里找到:https://github.com/Shinigami69/Ark-Dev-Kit_Source/tree/master/Engine/Source/Programs/IOS/iPhonePackager - Tal Aloni

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