如何确定用哪个Xcode版本开发的代码

22

我有iOS应用程序源代码,我想确定开发该项目所使用的Xcode版本。

project.pbxproj中,当我转到/* Begin PBXProject section */部分时,它显示:

compatibilityVersion = "Xcode 3.2";

所以我的猜测是它是基于某个4.x版本开发的,而不是xcode 5。请建议。


NSString *str = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] - Kirit Modi
1
你在尝试做什么?知道项目.pbxproj的Xcode版本能带给你什么? - user1118321
@user1118321,在苹果2月1日的公告之后,验证供应商不会在最后一刻搞砸成了一项任务。我想知道制作该项目所使用的Xcode版本。 - amar
4
在这种情况下,打开Xcode 5中的项目,进行转换,使用iOS7 SDK作为基本SDK工具并移除所有错误。 - staticVoidMan
2
我认为这是一个好问题。例如,在自动构建多个应用程序时,需要知道构建特定应用程序所需的Xcode版本。当然,可以添加包含Xcode版本并从中读取的文件,但使用由Xcode自动生成的内容会更有用。就我所见,compatibilityVersion不能用于此。 - diidu
@staticVoidMan,这正是我想在最后一刻避免的。 - amar
4个回答

19
如果您有与项目关联的.xcarchive或.ipa文件,那么您可以确定用于构建它的Xcode版本。除其他外,Xcode在构建时会将“DTXcode”键添加到info.plist中。
因此,请使用Finder打开您的.xcarchive文件或将.ipa文件重命名为.zip并使用Finder打开。
导航以查找应用程序包文件——即具有.app扩展名的文件。右键单击并选择“显示包内容”。查找info.plist并使用文本编辑器打开它。
您将看到类似以下内容:
<key>DTXcode</key>
<string>0611</string>

在此情况下,611是Xcode 6.1.1。

或者,如果您可以访问iTunesConnect,则可以查看已上传的二进制文件的详细信息。查找名为“Build SDK”的密钥。它将是一个字母数字字符串,例如12B411。

由于Apple通常只与Xcode捆绑一种版本的SDK,因此您可以使用此网站找到与SDK对应的Xcode版本:https://en.wikipedia.org/wiki/Xcode

对于12B411,我看到它是iOS 8.1 final版,它与Xcode 6.1 build 6A1052d捆绑在一起。


16
如果您打开 project.pbxproj 文件并搜索 CreatedOnToolsVersion,至少在较新版本的 Xcode 中,看起来这将给您想要的结果。
我在我的一个项目中将其设置为 7.3.1,在另一个使用该版本 Xcode 创建的项目中设置为 8.3.2。

这就是真正的答案。这不涉及任何除了你的.xcodeproj文件之外的东西。 - gog
3
我无法给出两个人正确的答案。这个回答在你有代码时适用于所有情况,并且值得一加。但是,需要指出的是CreatedOnToolsVersion显示的是创建代码所使用的Xcode版本,而不是最后使用的版本。我的显示为7.***,而当前我使用的是9.0版本。 - amar
不错!谢谢,我已经创建了 CreatedOnToolsVersion = 11.6; - Naishta
因为是真正的答案,所以被收藏了!对于你们那些使用shell的用户来说,grep 'CreatedOnToolsVersion' project.pbxproj可以从中获得很多有用的信息~ - Pyr3z

7
在 Xcode 11-12 版本中,以下方法适用于我:
在您的模式文件中提到了最后使用的 Xcode 版本。
YourProject.xcodeproj/xcshareddata/xcschemes/YourSchema.xcscheme

LastUpgradeVersion = "1160" 意味着 Xcode 11.6。

当你点击 Update to recommended settings 警告时,Xcode会更改此值!
即使你取消选中所有推荐设置并点击 done,它仍然会更改此数字。


我认为这忽略了补丁版本,例如对于13.2.1,我看到LastUpgradeVersion =“1320” - Daniel

1
我发现这里关于LastUpgradeVersion的答案似乎并不完全正确。
也许对于仍使用其原始版本的项目来说,它足够好用,但是在我们将项目升级到使用Xcode 14.3构建后(之前是10.3)*.xcscheme中的LastUpgradeVersion条目保持不变("1030")。
然而,*/project.pbxproj中的LastUpgradeCheck条目相应地进行了更新。
如果你使用Git的话,那么
git grep -F LastUpgradeCheck -- '*/project.pbxproj'

(给你们这些速通玩家)

哎呀!我真笨。LastUpgradeCheck 就在同一个文件中的 CreatedOnToolsVersion 旁边,而且后者更易读且更准确地表示次要版本。 - undefined

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