无法在xcode中生成iOS App存档

时间:2012-05-23 07:20:25

标签: iphone ios xcode macos

我在从应用程序生成iOS App存档时遇到问题。应用程序编译得很好,甚至在模拟器中工作。现在我想进行som临时测试,无法生成iOS App Archive。当我点击产品 - >存档它会生成一个通用的xcode存档。谁能帮我。我应该提一下,我已经生成了这个应用程序的iOS App Archive。由于某种原因,它刚刚停止生成iOS Archive。非常感谢。

40 个答案:

答案 0 :(得分:304)

检查构建设置:

  1. 主要项目目标
  2. 的跳过安装为NO
  3. 框架(子项目)目标的跳过安装是YES
  4. 在子项目的构建阶段,复制标题需要在项目中,而不是公共(如果构建静态库则不适用)
  5. 部署下的安装目录有效(例如/ Applications)

答案 1 :(得分:74)

如果您添加了框架/库,则可能会发生这种情况......您需要编辑该库的Target-> Build Settings并将“Skip Install”设置为“Yes”。当您重新存档时,XCode应该再次开始生成“iOS App Archive”而不是“通用xcode存档”。

答案 2 :(得分:61)

跳过安装之外,如果您在应用项目中打开了另一个lib / framwork项目,则必须从 构建阶段 / 复制标题中的 project

build phase of your lib/framwork target

答案 3 :(得分:43)

我做了以下工作让它适合我:

  1. 我有一个三维静态库,我使用cocoapods将文件包含在主项目中
  2. 跟随所有其他子项目/静态库的跳过安装,并将复制头从公共切换到项目如上所述
  3. 项目使用的每个库中
  4. 最重要的是转到构建阶段 - >复制文件并确保目标已从Absolute path更改为products directory。注意:请参阅下面的提示,以缩小搜索范围,找到导致此错误的库。
  5. 就是这样!

    提示:了解导致您的存档创建存档文件而不是ipa的违规文件:

    1. 选择存档,然后单击“分发”按钮。
    2. 选择“保存已建成产品”选项。
    3. 点击下一步并保存。
    4. 在Finder中浏览创建的目录。
    5. 'libraries'子目录将标识将Skip Install设置为Yes所需的库。
    6. 在某些情况下,usr/local/include将识别您需要从公共项目移动到项目的罪魁祸首头文件,或者您必须从绝对路径更改为产品目录的文件(甚至是您忘记设置跳过的文件安装到是标志)。但该目录(即usr / local / include)因子库目录结构而异。在许多情况下..您会在此处列出的步骤3中看到所有 复制文件下列出的文件。如果你在这里找到它们,那么你对问题的原因有明确的答案。

    7. 更新提示:让生活变得更加简单..无论上面的提示中的步骤4中出现什么文件..只需在xcode的全局搜索中搜索它..你应该立即得到你想要的结果..例如,这是我的文件夹的内容(按照上面的提示中的步骤):

      enter image description here

      所以我可以说它与加密 ssl 库有关。搜索它们:

      enter image description here

      让我意识到我忘了将skip install设置为yes。

答案 4 :(得分:21)

如果您导出存档,请将其打开,然后在产品中查看/urs/local/include,然后尝试this suggestion

  

在每个广告连播中,Packaging下,Private Headers Folder PathPublic Headers Folder Path设置为/usr/local/include。如果我清除它们,那么我会得到一个有效的存档。

enter image description here

将我的React Native应用升级到0.11.0,Xcode 7和CocoaPods 0.39.0.beta.4后,为我工作。

答案 5 :(得分:12)

如果您正在使用CocoaPods以及WatchKit或Today Extension,那么CocoaPods仓库上会有一个开放的issue来解释您的问题。

我的解决方案是从Copy Pod Resources下的WatchKit Extension和Today Extension目标中移除Build Phases阶段。一旦我这样做,该项目按预期编译和存档。

希望这对某人有所帮助,这让我难以忍受了一整天!

答案 6 :(得分:10)

如果上述任何一种答案无效,您的问题可能是cocoaPods。最新更新0.38.1让我感到困惑,但随后我降级为0.37.1,事情恢复正常。使用Xcode 6.3.1

稍后修改:更新为0.38.2也会解决此问题。有关此问题的更多信息,请访问:Cocoapods 0.38.1 failed to create valid Archive

答案 7 :(得分:7)

虽然我正在使用Xcode5,但为我编制的内容是编辑构建方案 - 尝试上述所有适用的建议对我的情况没有帮助。

我有两个目标,比如“App”和“App FREE”。当我试图存档免费版本时,我发现通用存档的问题,我在应用程序的“正常”版本之后添加了该版本。在我的例子中,当我在工具栏中选择了Scheme并选择了Edit Scheme时......我看到Build部分有两个目标,即App和App FREE。

我取消选中App的所有列,只选中App FREE的列,然后单击OK。下次我选择Product>存档我的应​​用程序免费而不是通用存档。 :)

答案 8 :(得分:6)

如果你只有一个项目,也许这个解决方案会很有用。 当我复制目标时发生了这个问题。结果我有两个并行构建的目标。这导致了这个问题。构建了通用IOS存档。

要将并行内置关闭转到

  • 管理方案,
  • 编辑方案,
  • 构建,
  • 删除其他目标。

答案 9 :(得分:5)

我的工作区中有多个项目(GTL,Pods和我的主项目),这对我有用:

选择项目,那里会有2种类型,项目目标

对于不是您的主要项目,例如"_CMTimeCompare", referenced from: ___24-[FBMediaView loadVideo]_block_invoke in FBAudienceNetwork(FBMediaView.o) "_CMTimeGetSeconds", referenced from: ___24-[FBMediaView loadVideo]_block_invoke111 in FBAudienceNetwork(FBMediaView.o) -[FBAdVideoView checkIfVideoEnded] in FBAudienceNetwork(FBAdVideoView.o) ___84-[FBAdVideoView playMovieWithURL:withVideoPlayCheck:withVideoTimeCheck:withFailure:]_block_invoke in FBAudienceNetwork(FBAdVideoView.o) ___84-[FBAdVideoView playMovieWithURL:withVideoPlayCheck:withVideoTimeCheck:withFailure:]_block_invoke_2 in FBAudienceNetwork(FBAdVideoView.o) -[FBAdVideoView updateMaximumWatched:] in FBAudienceNetwork(FBAdVideoView.o) "_CMTimeMake", referenced from: -[FBAdVideoView addTimingObserver:] in FBAudienceNetwork(FBAdVideoView.o) "_CMTimeMakeWithSeconds", referenced from: ___24-[FBMediaView loadVideo]_block_invoke in FBAudienceNetwork(FBMediaView.o) -[FBAdVideoView videoScrubberChanged:] in FBAudienceNetwork(FBAdVideoView.o) "_kCMTimeZero", referenced from: -[FBAdVideoView checkIfVideoEnded] in FBAudienceNetwork(FBAdVideoView.o) -[FBAdVideoView playMovieWithURL:withVideoPlayCheck:withVideoTimeCheck:withFailure:] in FBAudienceNetwork(FBAdVideoView.o) ___84-[FBAdVideoView playMovieWithURL:withVideoPlayCheck:withVideoTimeCheck:withFailure:]_block_invoke in FBAudienceNetwork(FBAdVideoView.o) ld: symbol(s) not found for architecture x86_64 GTL

<强> 项目:

PODS

<强> 目标:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

对于主项目(通常与您的产品名称相同):

<强> 项目:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

<强> 目标:

Skip Install = NO
Installation Directory = /Applications

检查每个项目和目标上的ios部署目标,以确保它们完全相同。

答案 10 :(得分:5)

我在更新到iOS 9和Xcode 7后遇到了这个问题.Josh H的解决方案对我有用:

  

在每个窗格中,在“打包”,“私有标头文件夹路径”和“公共”下   标题文件夹路径设置为/ usr / local / include。如果我清除它们   我得到了一份有效的档案。

我还为我的Podfile制作了一个安装后脚本来自动执行此操作!

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

只需将其添加到Podfile的底部并运行pod install

即可

答案 11 :(得分:4)

我有这个问题。在我的情况下,这是因为将Mac应用程序目标保留为iOS应用程序的依赖项。

设置这样的原因是Mac应用程序是用于为iOS应用程序生成一些数据的工具,然后将其包含在捆绑包中。

我必须删除该依赖项并在构建iOS应用程序之前单独构建该工具。

答案 12 :(得分:4)

在我的场景中,只有在我开始在主要的Objective-C项目中包含Swift代码之后才得到错误的“通用存档”。在对Xcode正在吐出的存档文件进行大量的故障排除和检查之后,我注意到SwiftSupport文件夹(带有Swift运行时所需的dylib)在我的存档中位于与香草品牌不同的地方 - 新的Swift项目应用档案。

我找到了Installation Directory构建设置,发现它已设置为我项目中的自定义路径。我只是将其删除(将其设置为通用值/Applications)和下一个Build - &gt;存档我确实按预期工作,并给了我一个合适的iOS App Archive。

<强> TL; DR:在您的应用中包含Swift代码时,请确保您的Installation Directory构建设置已设置为其默认值/Applications,尤其是当您从较旧的项目文件开始时可能有一些意外的遗留构建设置。

答案 13 :(得分:3)

离开这里以拯救其他人从同一个旅程。

我发现我需要从工作区中的静态库目标中删除相同的Copy Pod Resources构建阶段。

答案 14 :(得分:2)

除了Alex L的回答。

要点3.更改'构建设置' - &gt; “include / xxx”的“公共标题文件夹路径”也有效。

答案 15 :(得分:2)

如果以上都没有帮助你...经过很长时间.......

我删除了Info.plist for Bundle Version 中的值,因为我对Bundle Version Short 1.0感到很满意。的坏。不要这样做。

*注意我实际上是通过在右边的UI中编辑它而没有意识到它会在Info.plist文件中放入一个空键来实现的。我认为这使它无效。我的软件包在存档时显示为其他项目,没有图标,我无法上传到任何地方。

这归结为Info.plist中的无效值。如果它不是有效的存档,请尝试解压缩旧存档并删除/覆盖当前存档,并在重建存档时查看它是否已修复。

答案 16 :(得分:1)

  1. 转到“构建设置”并添加

    yourAppName / Resources / dist.plist 代码签名权利

  2. cmd + B iOS设备或选择 Real Device 作为构建目标

  3. 完成后 - &gt;滚动到“Products”文件夹,然后右键单击yourAppName.app

  4. 选择“在Finder中显示”

  5. 创建名称有效负载的文件夹(大写“P”

  6. 将yourAppName复制到您的有效负载文件夹

  7. 从您的有效负载文件夹中创建一个

  8. 将zip重命名 yourAppName.ipa

  9. 完成

答案 17 :(得分:1)

如果您在Project&gt;目标&gt;构建阶段&gt;目标依赖项中有任何.xcodeproj文件,请从那里删除它,然后构建您的ipa。这个对我有用。干杯

您可以在此处获得答案:xcode is creating generic xcode archive instead of iOS App Archive

答案 18 :(得分:1)

尝试几乎所有事情后:

  • 清洁,存档
  • 删除DerivedData,存档
  • 重启Xcode(我使用的是XCode7),存档
  • 以上的组合......

然后我注意到我的启动分区'可用磁盘空间不足'...大约1GB左右。 我重新启动,然后免费获得大约18GB。

然后打开Xcode和项目,执行归档......并且令人惊讶地(在尝试构建档案一小时后)我终于得到了非通用档案。

不知道它是一个修复它的免费磁盘问题还是修复它的macOS重启,但它对我有用。

答案 19 :(得分:0)

这些解决方案都不适合我。在我的情况下,Targets-> myApp->签名和功能->签名证书是 Apple Development而不是iOS Distribution

答案 20 :(得分:0)

在我的iOS应用程序项目中添加OS X命令行工具后遇到此问题,默认情况下,Skip Install对命令行工具的目标设置为NO。由于您显然无法将OS X二进制文件安装到iOS设备,因此归档默认为通用Xcode存档。为此目标设置“跳过安装”为“是”修复了问题。

答案 21 :(得分:0)

在我的情况下,从目标名称中删除下划线会修复它。

不确定是否是实际的下划线或名称改变本身才能解决问题。

答案 22 :(得分:0)

我遇到了类似的问题,但是在一个没有pod的WatchKit应用程序中。对于iOS应用程序,“跳过安装”已正确设置为“否”,但对于WatchKit应用程序错误地设置为“否”。

将WatchKit应用程序的Skip Install更改为YES(但对iOS应用程序保持NO状态)修复了问题,Xcode正确生成了iOS App Archive而不是Generic Xcode Archive。

答案 23 :(得分:0)

就我而言,其他30多个答案都没有奏效。我们将Archives(首选项 - &gt;位置)的位置设置为指向我们服务器的自定义路径(Windows Server 2008,如果这有任何区别)。

一旦我将位置设置回本地计算机中的默认位置,它就会生成一个常规的iOS应用程序存档。我不确定为什么会这样,但我希望它也有助于其他人。

现在我们存储必须手动将.xcarchive文件移动到服务器以进行存储,但至少不会遇到通用存档问题。

答案 24 :(得分:0)

在我的情况下,我有两个目标(Target1和Target2),其中第一个可以存档到“iOS App”,但仅存档到“其他项目”。因此,对我来说,解决此问题的更快方法是通过以下步骤将Target2替换为Target1的副本:
1。将Target2重命名为Target2_old
2。制作Target1的副本并将其重命名为Target2。
3。更改指向新Target2的正确.plist文件(来自旧目标)的链接,并检查班级中的“目标成员资格”。
4。打开“Manage Schemes ...”并删除Target2_old的方案,然后为新Target2添加新方案
5。选择此新方案,然后选择产品 - &gt;归档

答案 25 :(得分:0)

在我的情况下,我在复制文件中有一些文件。我刚删除它们,然后一切正常,我实现了iOS App Archive。 转到Build Phases-&gt;复制文件并删除文件。 希望这能解决你的问题。 :)

答案 26 :(得分:0)

这是我在使用未定义变量$(APP_PRODUCT_VERSION)定义版本的应用上发生的事情

我定义了版本,可以生成一个iOS应用。

答案 27 :(得分:0)

这是针对像我这样可怜的人使用的,这些解决方案都无法解决这些问题,即使是新的单视图应用程序,也可以毫无错误地构建,但是无法存档。

转到存档位置路径(在Xcode->首选项->位置->存档路径中可用)并删除有问题的日子的文件夹!

该死的苹果!

答案 28 :(得分:0)

如果将 Xcode 7 cocoapods v.0.38.2 一起使用。尝试从今天的扩展目标中移除copy pod resources

enter image description here

答案 29 :(得分:0)

就我而言,我必须将FMDB和BlocksKit都移动到静态库。以前它们是作为子项目建造的。请记住,您可以使用lipo来创建通用库。在构建最终产品时,模拟器代码将自动剥离。

答案 30 :(得分:0)

尝试在Framework projet的公共标题文件夹路径中设置$(PROJECT_NAME)标题。您必须构建库目标的设置,然后将公共标题文件夹路径编辑为$(PROJECT_NAME)标题。

答案 31 :(得分:0)

就我而言,我有一个自定义脚本,它将一些临时文件复制到:

${TARGET_BUILD_DIR}/myTempDir

这意味着,在调查存档以检查其内容后,我发现.app文件旁边有一个myTempDir文件夹。一旦我修改了脚本以保存其他地方,事情就会被排序。

答案 32 :(得分:0)

因为那是因为我在工作区工作。 该项目已存档,但将显示在组织者窗口中。 我关闭了工作区并自行打开了项目。 存档已在组织者中打开...希望它有所帮助。

答案 33 :(得分:0)

我通过在XCode中仅打开应用程序项目解决了这个错误,即。 不打开工作区,包括应用程序和其他项目/库/框架。

拥有2个独立的项目,框架或共享库以及iOS应用程序,我必须打开2个不同的XCode窗口,每个窗口都直接打开 .xcodeproj 文件,而不是常见的。 xcworkspace ,以便预先构建每个。

作为一个很好的副作用,在我执行 Clean 之后,XCode不再重建每个项目的每个目标,从而导致构建时间缩短。

背景:我正在创建一个开源SDK和一个演示iOS应用程序。我在一个工作区打开了。 在SDK目标上将跳过安装设置为 YES 将阻止任何人创建存档,因为它将为空,因此这不是一个选项。使用 Project 而不是 Public 标头会导致存档丢失应该分发的头文件,因此这也不是一个选项。

答案 34 :(得分:0)

这对我有用的方式(Xcode 5)我有两个目标,当我编辑方案时,在方案编辑器的左侧窗格中,你会看到[BUILD,RUN,TEST,PROFILE XXX.APP,从BUILD窗格中分析,存档],您将看到列表中列出的项目目标。在最右端,您将看到ARCHIVE选项,确保只选择一个目标进行存档。

我在项目中选择了两个目标,我只检查了产品中我想要的目标,并且它有效!

答案 35 :(得分:0)

还有一个解决方案,因为以上所有内容对我都不起作用......

User Header Search Paths(我认为Header Search Paths可以优雅地工作)更改为"$(BUILT_PRODUCTS_DIR)/BlocksKit"

<强>背景

在BlockKit中,开发人员在主项目中构建的头文件与部署时的结构不同。因此,您无法引用项目中的标头,并且必须引用复制到构建目录中的标头。

答案 36 :(得分:0)

为了彻底,我正在发布我的解决方案。

我在Xcode 5.1.1(5B1008)中尝试构建iOS项目存档时遇到了同样的问题。以上建议都没有解决问题,而且大多数都没有关系(我没有添加任何框架,并且在我的构建阶段的“复制标题”部分中没有任何公共条目。)

在我的情况下,修复问题包括简单地关闭我的项目,删除我之前创建的任何档案,转到首选项&gt;帐户,删除我的开发者帐户,退出Xcode,重新启动,重新添加我的开发者帐户,再次启动存档过程。这立刻解决了我的问题。

答案 37 :(得分:0)

另一个可能的原因是在“目标依赖关系”中引用了不同平台的项目。在我的特定情况下,我正在开发一个共享OSX和iOS代码的项目。在其中一个iOS目标中,我不小心将OSX目标添加为依赖项。

答案 38 :(得分:-2)

这不是正确的解决方案,但是,我能够生成App存档。我删除了整个项目并进行了新的检查(我知道,真的很愚蠢,但经过几个小时的xcode拒绝生成应用程序存档我会做任何事情)。一旦我设置了正确的代码签名就行了。可能,xcode在配置上有一些不匹配。如果有人知道,什么(可能的配置)实际上可以阻止xcode生成应用程序存档我会很高兴听到它。无论如何,谢谢你们。

答案 39 :(得分:-10)

创建档案后,在Xcode的管理器中,选择您的已存档项目文件,然后选择Distribute

这会打开另一个窗口,允许您Save for Enterprise or Ad-Hoc Deployment

这是您想要的选项,选择“下一步”后,您可以选择要使用的分发配置文件,然后选择要将.ipa保存到的位置。

请务必选择Save for Enterprise or Ad-Hoc Deployment选项, Export as Xcode Archive选项:

enter image description here