如何检查用于编译.ipa或.app文件的iOS SDK版本

前端之家收集整理的这篇文章主要介绍了如何检查用于编译.ipa或.app文件的iOS SDK版本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只有.ipa文件(我没有build env)没有任何访问项目.我试图确定他们是否建立链接SDK 7.有没有办法或实用程序来检查.zip文件的SDK版本?

解决方法

是.首先将ipa复制到像/ tmp这样安全的位置,然后解压缩:
cd /tmp/
cp ~/Music/iTunes/Mobile\ Applications/APPNAME.ipa .
unzip APPNAME.ipa

然后使用otool查看它链接的框架版本:

otool -L Payload/APPNAME.app/APPNAME

这将给你如下结果:

Payload/APPNAME.app/APPNAME (architecture armv7):
    /usr/lib/libxml2.2.dylib (compatibility version 10.0.0,current version 10.8.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0,current version 992.0.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0,current version 2372.0.0)
    /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0,current version 600.0.0)
    /System/Library/Frameworks/AudioToolBox.framework/AudioToolBox (compatibility version 1.0.0,current version 359.0.0)
    /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0,current version 1.0.0)
    /usr/lib/libsqlite3.dylib (compatibility version 9.0.0,current version 9.6.0)
    /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration (compatibility version 1.0.0,current version 499.0.0)
    /System/Library/Frameworks/CoreLocation.framework/CoreLocation (compatibility version 1.0.0,current version 1491.2.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0,current version 228.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,current version 173.8.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0,current version 793.0.0)

对于不同的架构,可以重复该信息.

对于每个框架,“当前版本”是与编译应用程序时使用的SDK对应的内部版本号.对于Foundation.framework,您可以在NSObjCRuntime.h中查找这些.它包含一堆命名的常量,可以在iOS(或OS X)版本之间转换和otool给您的版本号.例如:

#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  993.00
#define NSFoundationVersionNumber_iOS_6_1  993.00

常数不包括当前的iOS版本.你可以在运行时找到.创建一个新的测试项目并将其添加到某处:

NSLog(@"Foundation version: %f",NSFoundationVersionNumber);

这将打印出当前值.在iOS 7.0.4我得到1047.220000. (这适用于任何版本的iOS和Foundation,但如果可能,查找头文件中的值更容易).

数字并不总是完全匹配,因为iOS的每个次要版本都没有常量.但是两个版本号都随着时间的推移而增加.在这种情况下,上面的“当前版本”是992.0.0,我碰巧知道这个程序是为iOS 5.1.1编译的.根据您看到的当前版本,您可能需要进行类似的插值.为了比较,在几年前我知道的另一个应用程序,基础版本是678.24.0.查看这个确认应用程序的年龄:

#define NSFoundationVersionNumber_iPhoneOS_2_0  678.24

可能查找其他框架的版本号,但是我没有跟踪适当的头文件.如果你想要的是SDK版本,Foundation版本会告诉你你想知道什么.

附录:Matt Stevens pointed out to me也可以通过这样做直接查找版本:

otool -l Payload/APPNAME.app/APPNAME | fgrep --after-context=3 LC_VERSION_MIN_IPHONEOS

这给你的结果如下:

cmd LC_VERSION_MIN_IPHONEOS
  cmdsize 16
  version 5.0
      sdk 6.0

这在上面提到的古老的iPhone OS 2.0应用程序中不起作用,但它对我尝试的其他一切都有效.我不知道这是添加什么版本,但它应该适用于几乎所有你遇到的应用程序.

猜你在找的iOS相关文章