Xcode 4 + iOS 4.3: "No Packager exists for the type of archive" Xcode 4 + iOS 4.3:"没有适用于该存档类型的打包程序"

76
我刚刚升级到Xcode 4并尝试创建一个早期项目的adhoc构建。每当我使用“归档”选项时,我要么在组织器窗口中根本没有存档,要么有一个存档,但没有将其打包为.ipa的选项,因为“类型存档不存在打包程序”。有人能否在从Xcode 3.2迁移的项目中使adhoc构建在Xcode 4下工作?

类似的问题,但是也没有答案 :-( https://dev59.com/UW435IYBdhLWcg3wtCWQ - Manni
首先尝试在Mac磁盘工具中进行清理构建并检查文件权限。 - Sergnsk
有人知道如何创建并添加这样的打包程序吗? - Rob Agar
我移动项目时没有遇到任何问题。我有旧项目的备份。我会检查并让您知道。编辑:我的旧项目被视为OS-X项目。我不得不编辑项目文件并更改构建目标。这解决了我的问题。我怀疑这不是您情况下的问题。 - Steve McFarlin
编辑您的方案。在存档操作的构建配置中,您有什么?(项目->编辑方案->存档) - Steve McFarlin
这里是如何将静态库添加到项目的完整说明。也许会有所帮助。https://docs.google.com/document/pub?id=14XR5zcZb2Kz2s6A4AbzB00NLkrW9bWxMMprVsUao-hY - dmitrynikolaev
7个回答

134

您可能在主项目中有一些链接的项目(例如库)。 进入这些项目的“生成设置(Build settings)”并将“跳过安装(Skip install)”(部署类别(Deployement category))设置为“Yes”,但是将主项目的“跳过安装(Skip install)”设置为“No”。 构建,存档,然后您应该能够选择ipa包。


在我的情况下,我还将子项目中复制的头文件包含到我的源代码中。然后它就可以工作了。 - Mike Bevz
5
无法想象如果你没有发布这个答案,我会浪费多少时间。 - cduhn
+1 救了我,谢谢!重要的是人们要明白这必须在静态库本身上完成,而不是你的应用程序目标。这让我有点困惑。 - jj0b
4
为了节约其他人的时间,根据Josh Brown(在下面某个答案中)的说法,仅更改“Skip Install”不起作用,如果您的主项目中有另一个完整的项目(即不仅是.a文件)。您需要在该附加项目中执行以下额外步骤..."在该项目中,进入“Build Phases”并在“Copy Headers”部分中,将所有头文件从“Public”和“Private”部分移动到“Project”部分。" - 在原始答案中,他还提到浏览.xcarchive文件内容以查看需要移动的内容。 - Hlung
哈哈,有趣,这个人在SO上只发了一个问题 - 就是这个问题 - 但是这个问题太棒了!他的声望比我们大多数人都高!不过,谢谢你,伙计 :) - Martin
非常感谢,有人能告诉我这个解决方案的来源吗?是否有苹果文档说明这种调整方式? - rakeshNS

25

谢谢,但是我需要三步来完全解决我的项目框架问题:

  1. 为每个依赖项目设置目标构建设置/"跳过安装"属性为"YES"

  2. 清除每个项目的目标构建设置"安装目录"属性

  3. 对于每个项目,将所有头文件从"Build Phases/Build Settings/Copy Headers"公共/私有部分移动到项目中


3
第三步对我有用!谢谢! - Erik
我希望我能给你点赞十次。#3 解决了我的问题。 - mmc
太好了,加上两个步骤:清理并重新打开XCode,这对我很有帮助。谢谢! - Dmitry Shashlov
加入感谢的同时,也告诉大家不要更改顶级项目的安装目录(应该是$(LOCAL_APPS_DIR))- 否则档案将完全无法显示。 - Oded Ben Dov
1
非常感谢。这个私有/公有项目的事情对我有用。 - Sedat Kilinc

9
我发现这些答案的结合解决了问题。我花了很多时间验证所有链接项目上是否将“Skip Install”设置为“Yes”,结果发现这只是我的问题的一部分。如果您在存档时遇到此问题,请执行以下步骤:
  1. 在组织者中找到归档文件,右键单击并选择在Finder中显示。
  2. 在Finder中右键单击.xcarchive文件并选择显示包内容。
  3. 找到Products文件夹并查看其中的内容。Products文件夹中应该只有一个Applications文件夹,并且Applications文件夹中应该只包含一个iPhone应用程序(YourProject.app)。

如果在第3步中,在Products下或子文件夹中找到静态库(<some-library>.a),请转到Xcode并选择生成该静态库的项目(根据静态库名称应该能够确定是哪个项目)。进入Build Settings并选择目标,然后将“Skip Install”设置为“Yes”。

如果在第3步中,你发现头文件(<some-header>.h)直接在Products下或者子文件夹下,那么请前往Xcode并选择包含这些头文件的项目。你应该能够根据头文件名称中使用的前缀找到该项目。在该项目中,前往“Build Phases”,然后在“Copy Headers”部分将所有头文件从“Public”和“Private”部分移动到“Project”部分。
感谢this answerthis answerthis answer帮助我解决了这个问题。

1
在该项目中,前往“Build Phases”,并在“Copy Headers”部分中,将所有头文件从“Public”和“Private”部分移动到“Project”部分。 - Hlung

5
这是我们在解决这个问题时发现的两个有用提示...虽然不是答案,但它们可能会为其他人节省大量时间。如果您正在使用未由xcode4构建的静态库,则“deployment->skip install”解决方法对其无效。解决方法是不将它们添加到项目中,并确保它们的路径在构建设置中的Header和/或Library Search Paths中,以及将-lblah条目添加到链接器标志中。此外,如果您将静态库设置为目标依赖项(例如,我们将libjson.a设置为此项,我非常确定这是正确/合理的做法),则无论如何都无法构建.ipa文件。我们花了一整天的时间围绕这个愚蠢的问题跳舞,在最后移除它就解决了。个人认为这应该真正破坏项目...但它可以工作,所以嘿。

谢谢,这个方法对我也有效。"跳过安装"没有任何效果,最终从我的项目目标中移除了库的项目/目标依赖关系才是解决方案(而我只是将".a"文件添加到项目的链接库中,并继续链接头文件)。 - André Morujão

3
为了找出哪个项目/库/组件阻止了Xcode进行正确的归档,请按照以下步骤操作:
1. 在“组织者”中找到该归档文件,右键单击并显示在Finder中,这将会显示一个.xcarchive文件。 2. 右键单击并选择“显示包内容”,然后查看“产品”文件夹。很可能不仅有一个包含一个iPhone应用程序的文件夹。 3. 在我的情况下,有一个usr/local/lib文件夹结构,其中包含libOAuthConsumer_iPhone.a。当我在Xcode中搜索它时,我确实发现了另一个项目,在那里我没有将Skip Install设置为YES。 4. 对于每个人来说,解决问题可能不是那么容易,但查看软件包内部至少可以让你知道哪个组件破坏了归档过程。

1
以下是解决Xcode 4.2中上述问题的步骤:
1:对于所有添加的第三方库,请将“Skip to install”设置为YES。“Skip to install”对于您的项目应该设置为NO。您可以从构建设置中访问“Skip to install”。
2:从左侧导航器窗格中选择第三方库头文件。
2.1:右侧是Utililtes窗格。使用视图 ->实用程序 ->显示/隐藏实用程序(命令-选项-0)或工具栏中视图分段控件中的第三个按钮来显示和隐藏它。
2.2:选择文件检查器(命令选项-1)。
2.3:选择目标成员资格并将选项从公共或私有更改为“项目”。

1

跳过安装对我没有起作用。我解决了这个问题,将所有标记为公共的头文件移动到项目中。我目前正在一个包含静态库和iPad项目的工作区中工作。似乎在使用链接项目构建产品时,Xcode存在某种错误或问题,Xcode会同时构建两者,而组织器没有显示共享ipa的选项。


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