问题 安装相同iPhone项目的不同版本?


虽然我是游戏原型,但我经常需要回到与旧版本进行比较,以便更好地了解我是否在正确的轨道上。但是,每次我需要检查特定版本时,必须检查旧版本并重新导出是一个长时间的过程。如果我可以简单地推出不同的版本,它会更加顺畅。

如何在设备上安装同一项目的多个版本?


12351
2017-12-19 16:50


起源



答案:


如果为程序提供不同的软件包标识符,则可以将它们安装在同一设备上。可能会添加一个新的构建目标,它将随机数(或构建版本或svn修订版等)附加到捆绑包标识符的末尾(可能还有应用程序名称),然后您可以同时安装多个版本。

例如,您可能拥有标题为“MyGame”的应用程序“com.mycompany.mygame”,您的脚本将创建标题为“MyGame43”的版本,例如“com.mycompany.mygame43”。

然而,Apple可能会因为开发人员的所有困难(也称为代码签名)而失败。我个人没有做很多App Store开发,但我知道配置文件可能会非常麻烦,他们可能会遇到这种方法的问题。谁知道。

编辑:猜测它确实适用于代码签名,但不适用于应用内购买。


11
2018-02-15 02:02



这当然也是我这样做的方式。 +1。 - Goles
值得注意的是,要使其工作,您需要在开发配置文件中使用通配符应用程序ID。我之所以提到这一点是因为某些应用程序(例如那些使用应用程序内购买的应用程序)无法在配置文件中使用通配符ID。 - Jasarien
Jasarien这是一个重要的观点。 erastusnjuki的解决方案不会解决应用内购买问题吗? (更改产品名称而不是包标识符) - Steph Thirion
SpringBoard(主屏幕)不会显示多个具有相同捆绑ID的应用程序。 - Grant Paul
疑难杂症。我的项目设置方式(以及默认情况下如何设置xcode项目),如果我更改产品名称,捆绑ID也会更改,因此erastusnjuki解决方案有效。谢谢你回答这个问题。您是否介意编辑您的答案以澄清代码签名事项,并注意它不适用于应用内购买?谢谢! - Steph Thirion


答案:


如果为程序提供不同的软件包标识符,则可以将它们安装在同一设备上。可能会添加一个新的构建目标,它将随机数(或构建版本或svn修订版等)附加到捆绑包标识符的末尾(可能还有应用程序名称),然后您可以同时安装多个版本。

例如,您可能拥有标题为“MyGame”的应用程序“com.mycompany.mygame”,您的脚本将创建标题为“MyGame43”的版本,例如“com.mycompany.mygame43”。

然而,Apple可能会因为开发人员的所有困难(也称为代码签名)而失败。我个人没有做很多App Store开发,但我知道配置文件可能会非常麻烦,他们可能会遇到这种方法的问题。谁知道。

编辑:猜测它确实适用于代码签名,但不适用于应用内购买。


11
2018-02-15 02:02



这当然也是我这样做的方式。 +1。 - Goles
值得注意的是,要使其工作,您需要在开发配置文件中使用通配符应用程序ID。我之所以提到这一点是因为某些应用程序(例如那些使用应用程序内购买的应用程序)无法在配置文件中使用通配符ID。 - Jasarien
Jasarien这是一个重要的观点。 erastusnjuki的解决方案不会解决应用内购买问题吗? (更改产品名称而不是包标识符) - Steph Thirion
SpringBoard(主屏幕)不会显示多个具有相同捆绑ID的应用程序。 - Grant Paul
疑难杂症。我的项目设置方式(以及默认情况下如何设置xcode项目),如果我更改产品名称,捆绑ID也会更改,因此erastusnjuki解决方案有效。谢谢你回答这个问题。您是否介意编辑您的答案以澄清代码签名事项,并注意它不适用于应用内购买?谢谢! - Steph Thirion


您需要每个版本都有不同的包标识符。

您可以创建一个脚本来编辑Info.plist,将版本号附加到包标识符并创建自定义构建阶段以便为您运行脚本...或者您可以手动编辑包标识符。


2
2018-02-15 15:45





我这样做,并为我工作: 我使用具有不同产品名称的相同项目。

1.更改产品名称

XCode组和文件窗格 - >目标 - >项目名称 - >(Ctrl +单击)获取信息 - >构建 - >产品名称。

这使我能够使用相同的配置文件在同一设备上创建许多应用程序(根据版本具有不同的名称,例如AppName1.1,AppName1.2)。

2.对于每个项目,我使用ProductName创建Folder仅用于识别目的。

因此,产品名为AppName1.1的项目将包含在文件夹AppName1.1等中。 当我在版本文件夹中进行许多更改时,我包含一个小的readme.txt。

项目名称保持不变,如果我更改它将无法正常工作。


2
2018-02-18 08:37





编辑以突出显示以前的第三个选项以及我现在管理此问题的方式:

我会使用Source Control来标记每个版本 - 这样很容易回到以前版本的代码。应该可以在单独的文件夹中签出标记的项目(我使用Subversion)。

将旧版本放在单独的目录中后,更改Bundle Identifier - 添加标签名称和构建等。更改捆绑包标识符时 - 确保不更改初始编号,应用程序仍应使用您的配置个人资料。这假设您具有用于开发的通配符配置文件。如果您需要包含Nofifications或应用程序内购买,则可能无法进行此操作。

=============================

以前版本的答案:

我有一个快速的技巧,我用来保存版本 - 我使用不同版本的模拟器,在开发过程中我不断在不同的版本之间移动。如果您使用模拟器执行此操作,您还可以移动文件。

但是,在设备上,您将不得不更改您提到的包标识符。每次我想冻结功能并进入新阶段时,我都会编辑捆绑版本。

另一个选择是使用您的版本控制来标记您的每个版本,允许您根据需要返回到以前的版本作为单独的项目,然后您可以更改捆绑标识符并作为单独版本安装。

现在我写了这个回复,我想我将开始使用选项3并在SVN中更好地标记我的版本并使用此方法,因为它比随机记忆哪个版本在哪个模拟器中更少随机,它将允许我部署在设备也是。


1
2018-02-17 12:35





每当我达到里程碑时,我只是将整个项目压缩成拉链。然后,如果我需要返回并引用它或运行它我可以提取它并编译,我有两个单独的版本,我可以切换。这不是最优雅的解决方案,但它很容易做到,您可以将所有备份放到外部硬盘上以便安全保存。


0
2018-02-21 19:28