在内部分发:在现有应用程序上重新安装应用程序,导致应用程序出错

时间:2011-09-07 20:19:57

标签: iphone objective-c ios ipad distribution

我有一个准备进行内部分发的应用程序。我创建了清单文件和一个简单的下载页面,以便从个人服务器下载应用程序。

如果设备中未安装该应用程序,则会立即下载并安装该应用程序。 一旦安装了应用程序,如果我再次点击下载按钮,iO会问我是否要安装应用程序,就像第一次一样,然后开始下载。

第二次下载完成后,我点击图标,但应用程序拒绝启动,iPhone配置实用程序上的控制台会抛出以下内容

The 'MyApp' bundle at /private/var/mobile/Applications/15F088EB-B996-48CE-8331-A5CE85CDD74F/myapp.app does not have an executable path. Please check the bundle's Info.plist file.

奇怪的事情:

1 - 出现此错误时,如果我按住睡眠按钮几秒钟关闭设备并再次重启设备,应用程序将重新开始工作。

2 - 假设我的myapp.app在我的服务器上托管了捆绑版本1.0。我是第一次在设备上安装它,它的工作原理。然后我将托管版本升级到捆绑版本2.0并再次执行相同的下载,应用程序升级和启动没有问题。

问题1:有什么想法吗? 问题2:有没有办法处理这个版本的差异?我的意思是,作为一个简单的解决方法,如果我可以显示如下内容:“您的版本是最新的”并且不下载新包

感谢!!!

3 个答案:

答案 0 :(得分:1)

对我有用的解决方案非常简单。在部署新版本之前,请修改Info.plist文件中的“Bundle version”和“Bundle version string,short”值以反映新版本。例如,如果安装的应用程序具有“Bundle version”1.0,请使用1.1。 Bundle版本字符串也一样,也很短。

答案 1 :(得分:1)

我遇到了完全相同的问题,并使用windows解压缩和压缩找到了一个奇怪的解决方案...

对我来说这个问题的原因是在初始构建之后用客户特定文件重新打包ipa。因此,这可能适用于您,也可能不适合您,因为我不知道您问题的根本原因。

我的ipa,安装plist和安装html文件托管在运行Tomcat的内部Windows Server 2003上。

之前忘记添加此内容,但使用的'zip / unzip'来自Symbian常用文件...

必需的安装:(我们默认安装这些安装作为客户端客户构建和配置系统的一部分)

  1. Perl(ActivePerl 5.6.1)
  2. 针对SYMBIAN OS的S60 3RD EDITION SDK(9.1)
  3. 解决方案:

    1. 确保路径包含“C:\ Program Files \ Common Files \ Symbian \ tools”和“.. \ Perl \ bin”
    2. 在ipa文件的位置打开提示。
    3. 使用“解压缩myapp.ipa”解压缩ipa,然后您将看到“Payload”文件夹。
    4. 使用“zip -r mynewapp.ipa Payload”
    5. 重新压缩包裹

      和中提琴,对我来说,新拉链的ipa可以安装在自身上而不会导致错误,而且我都看到了。

      我不确定是否有任何其他zip / unzip可以像Symbians工具那样工作,但是因为我要求它安装用于我使用的传统s60配置。这解决了我的问题,所以我现在编写了一个部署机制,在发布新版本时执行此重新压缩。

      创建部署脚本时,我还发现如果不从与文件相同的目录运行,zip命令会产生不同的结果。在这种情况下生成的ipa是可卸载的,因此请确保在使用unzip和zip之前切换到包含ipa的目录。

      希望这有一些帮助。

答案 2 :(得分:0)

您应该在Info.plist中指定两个键(CFBundleVersion& CFBundleShortVersionString)。

  

CFBundleVersion(String - iOS,OS X)指定捆绑包的构建版本号,该版本号标识捆绑包的迭代(已发布或未发布)。构建版本号应该是由三个非负的,周期分隔的整数组成的字符串,第一个整数大于零。该字符串应仅包含数字(0-9)和句点(。)字符。前导零从每个整数中截断,将被忽略(即1.02.3相当于1.2.3)。此密钥不可本地化。

     

CFBundleShortVersionString指定捆绑包的发布版本号,用于标识应用程序的已发布迭代。

每次为测试或具有相同发行版本的用户(CFBundleShortVersionString)构建adhoc版本时,您可以将CFBundleVersion添加1

例如:您的CFBundleShortVersionString为1.2.3,您的CFBundleVersion为1000.当您修复错误并构建用于测试的特殊版本时,您可以将CFBundleShortVersionString更改为1001。