检测 iOS App 是否写在 Swift

Detect if iOS App is written in Swift

我正在开发一个工具,试图为应用程序上的越狱设备转储 header 类。 我正在使用 Clutch,但有时 Clutch 无法使用某些较新的应用程序,我正在考虑集成 Clutch 以外的一些工具。 所以,我需要先判断二进制文件是否写在Swift,这样我才能切换到正确的工具执行。

我的问题是, 有没有办法,比如命令工具来确定 iOS 应用程序二进制文件是否用 Swift 编写? 与 Obj-C 相比,二进制文件在 Swift 中的构建方式真的有很大不同吗?

.app 文件中有一个 _CodeSignature 文件夹。里面有一个 CodeResources 文件。如果您将其作为文本打开,您将看到它包含 Frameworks/libswiftCore.dylib

我相信这表明它是用 swift 构建的。

您可以使用nm tool打印应用程序符号table。如果您搜索 swift,例如使用 grep:

nm YourApp | grep swift

它将打印类似这样的内容(以及更多):

U __swift_FORCE_LOAD_$_swiftFoundation

对于 100% Objective-C 应用,结果将为空。但是,您无法判断代码是否为 100% Swift,因为对于混合 objc + swift 应用程序,结果将类似于 swift 应用程序。