Xcode 4 + iOS 4.3: “不存在存档类型的打包器”

我刚刚升级到 Xcode 4,正在尝试创建一个早期项目的特别版本。每当我使用“存档”选项时,要么在“组织者”窗口中根本没有存档,要么存在一个存档,但是没有选项将其打包为。Ipa,因为“对于存档类型,不存在打包器”。

是否有人在 Xcode 4下为从 Xcode 3.2迁移过来的项目进行了临时构建?

14846 次浏览

you may have some linked projects (like librairies) inside your main project. Go to the Build settings of those projects and set the setting "Skip install" (Deployement category) to "Yes", but leave the "Skip install" of the main project to "No". Build, archive, and you should be able to select the ipa package.

Here's two other tips that we found useful with this problem...not answers but they may save someone else a LOT of time messing around 8/

If you're using static libs that are NOT being built by xcode4 then the "deployment->skip install" workaround won't work for them. The work around for that is to NOT add them to the project and make sure their paths are in the Header and/or Library Search Paths in your Build Settings plus the -lblah entries are added to the Linker Flags.

Also, if you have a static lib set as a Target Dependency (e.g. we had libjson.a set as this and I'm pretty sure that's the correct/logical thing to do) then you simply won't be able to build .ipa's no matter what. We spent more than a full day dancing around with this stupid problem and in the end just removing this solved it. Personally I think this should really leave a broken project...but it works so meh.

Thanks but I needed 3 steps to entierly solve the problem with my project framework:

  1. set the Target Build Settings/"Skip Installation" property to "YES" for every dependency project

  2. clear the Target Build Settings "Installation Directory" property for every projects

  3. for every projects, move every headers from section "Build Phases/Build Settings/Copy Headers" Public/Private to Project

Skip install didn't work for me. I solved this problem moving all headers marked as public to project. I'm currently working in a workspace with a static lib and an ipad proj. Seems like there is a bug or something with xcode whenever you want to build your product with a linked project, xcode builds both and Organizer doesn't show an option to share an ipa.

In order to figure out what project/library/component that is preventing Xcode from making a proper archive do this:

Find the archive in the Organizer, right-click and show in finder. This will show an .xcarchive file. Right-click and Show Package Contents. Now look in the Products folder. Most likely there will be more than just an Application folder with one iPhone application inside.

In my case there was a usr/local/lib folder structure containing libOAuthConsumer_iPhone.a and when I searched for that in Xcode, I did indeed find another project where I haden't set Skip Install to YES. It may not be so easy for everyone but looking inside the package should at least give you a pointer as to which component is messing up the archive process.

I found that a combination of these answers solved the problem. I spent a lot of time verifying whether Skip Install was set to Yes on all linked projects and it turned out that was only part of the issue for me. If you're experiencing this issue with Archive, here are the steps to take:

  1. Find the archive in the Organizer, right-click and select Show in Finder.
  2. Right-click the .xcarchive file in Finder and select Show Package Contents.
  3. Find the Products folder and see what's in it. There should only be an Applications folder in the Products folder, and the Applications folder should contain only one iPhone app (YourProject.app).

If, in step 3, you find a static library (<some-library>.a) either directly under Products or in a subfolder, go to Xcode and select the project that produced the static library (you should be able to tell which project it is based on the name of the static library). Go to the Build Settings and select the target, then set "Skip Install" to "Yes".

If, in step 3, you find header files (<some-header>.h) either directly under Products or in a subfolder, go to Xcode and select the project that contains those headers. You should be able to find the project based on the prefix used in the header file names. In that project, go to the Build Phases, and in the Copy Headers section, move all headers from the Public and Private sections to the Project section.

Thanks to this answer and this answer and this answer for helping me to resolve this.

These are steps to solve above problem in xcode 4.2

1: " Skip to install" to YES for all third part libraries which are added. "Skip to install" to NO for your project.You can access "Skip to install" from Build settings.

2:Select your third party library headers from left Navigator pane.

2.1:On the right is Utililtes pane.Show and hide it with view ->utilities->show/hide utilities (command-Option-0) or with third button in the view segmented control in the toolbar

2.2: select file inspector(command-option-1)

2.3 choose Target membership and change option to 'Project' from public or private