Xcode无法识别我的新配置文件

时间:2011-03-13 18:33:48

标签: iphone ios xcode ios-provisioning xcode-organizer

我的应用程序的开发配置文件已于几周前过期,因此我访问了配置门户以获取全新的配置。获得它后,我访问了Xcode Organizer,从我的设备和Mac中删除了过期的配置文件,然后导入了新的配置文件。 Xcode立即将配置文件安装到我的设备上,我的应用程序再次在设备上运行。

问题在于,虽然管理器能够看到新配置文件并正常安装,但IDE会在旧配置文件和新配置文件之间混淆。每次我尝试构建应用程序时,它都会立即失败。错误控制台告诉我Xcode找不到旧配置文件,因为列出的GUID属于旧配置文件。真奇怪;我认为Xcode现在已经意识到了新的配置文件。

我尝试从我的设备和Mac中删除新配置文件,然后重新安装配置文件。不起作用,Xcode仍然试图寻找旧的。我也试过选择一个不同的配置文件让Xcode忘记旧的,然后选择新的。我甚至尝试在其他选项中手动输入新GUID的GUID。然而,Xcode仍然坚持寻找旧的配置文件,现在它已经从我的Mac上消失了。

如何说服Xcode我为我的应用生成了新的配置文件以供其使用?

9 个答案:

答案 0 :(得分:17)

tl; dr:结果我只需手动编辑项目文件,告诉Xcode新的配置文件。现在,我不知道为什么我必须手动更新项目文件。也许我在将新配置文件导入Xcode的过程中做错了,所以它没有意识到我的新配置文件已经进入。或者文件系统中途窒息而Xcode无法自行更新。哦,好吧。

现在为 fun 技术部分:

  

重要提示:与其他涉及修改文件的内容一样,您不应修改:请务必备份.xcodeproj捆绑包和/或整个Xcode项目,或确保您的Xcode项目保持适当的版本控制。你不想搞砸并导致Xcode停止在你的设备上构建你的项目,没有任何东西可以依赖。

我偷看了我应用的.xcodeproj包的内容(此时Xcode没有运行)。要查看这些内容,请在Finder中打开项目文件夹,然后按住Control并单击.xcodeproj文件,然后选择显示包内容

Breeze.xcodeproj/
  Daniel.mode1v3
  Daniel.pbxuser
  project.pbxproj

然后在文本编辑器中打开project.pbxproj(它的文本,而不是二进制文件),并查看构建配置信息。

标有/* Begin XCBuildConfiguration section */的部分(使用编辑器的搜索功能可以找到)。它是一个条目列表,每个条目代表给定构建配置中给定配置文件的代码签名配置。

以下是我用于签署二进制文件以进行开发的配置文件的信息:

1D6058940D05DD3E006BFB54 /* Debug */ = {
    isa = XCBuildConfiguration;
    buildSettings = {
        ALWAYS_SEARCH_USER_PATHS = NO;
        "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Daniel Tan (XXXXXXXXXX)";
        COPY_PHASE_STRIP = NO;
        GCC_DYNAMIC_NO_PIC = NO;
        GCC_OPTIMIZATION_LEVEL = 0;
        GCC_PRECOMPILE_PREFIX_HEADER = YES;
        GCC_PREFIX_HEADER = Breeze_Prefix.pch;
        GCC_VERSION = com.apple.compilers.llvmgcc42;
        INFOPLIST_FILE = "Breeze-Info.plist";
        IPHONEOS_DEPLOYMENT_TARGET = 4.0;
        PRODUCT_NAME = "Breeze";
        "PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";
        SDKROOT = iphoneos;
    };
    name = Debug;
};

值得注意的是这一行:

"PROVISIONING_PROFILE[sdk=iphoneos*]" = "36F99F3E-805F-47A7-95D4-FF8324711CBE";

这是构建错误报告的GUID;我过期的配置文件的标识符。

我所要做的就是用新配置文件的GUID替换它:

"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E6E6369E-FD58-4886-9C3A-72C9DAE36501";

我再次在Xcode中打开我的项目,现在我的应用程序使用新的配置文件成功构建并安装在我的设备上。

答案 1 :(得分:15)

以下是我在Xcode 4中的表现:

  1. 选择不从项目编码代码>构建设置>代码签名
  2. 清理构建
  3. 再次构建 - 应显示“此内容需要签名”等错误。
  4. 从代码签名
  5. 中选择新配置文件
  6. 重建

答案 2 :(得分:8)

我能够通过在代码签名标识中将其更改为“不代码签名”来修复此错误。构建,您会收到错误“产品类型需要代码签名......等等......”。然后返回并选择正确的配置文件。建立和所有好。这发生在我身上,因为我的证书已经过期而且我续签了。除了上述内容之外,我还必须从我的钥匙串和组织者中删除旧证书。

答案 3 :(得分:1)

  1. 关闭de xcode
  2. edith with texmate,youtproject.xcodeproj
  3. 找到此行"PROVISIONING_PROFILE[sdk=iphoneos*]" = "E8DEEBA3-FE0A-419F-9F7E-258572D55807";
  4. 粉碎
  5. 重新启动xcode build&企业档案

答案 4 :(得分:1)

要添加到solution above,您可以使用可爱的xcodeproj gem来帮助完成这样的事情。请注意,它确实将您的OpenStep key = value;样式plist转换为XML。注意:如果您稍后在Xcode中更改项目文件,我发现Xcode会将其更改回来。无论是在Xcode还是从命令行构建文件样式都可以。有关如何使用它的示例

project = Xcodeproj::Project.new('Foo.xcodeproj')
csi_key = 'CODE_SIGNING_IDEDNTITY'
project.targets.each do |target|
  target.build_configurations.each do |conf|
    conf.build_settings[csi_key] = 'iPhone Developer: Cool Dood (XYZ123)' unless conf.build_settings[csi_key] == nil
  end
end

以下是我如何使用它的要点:https://gist.github.com/82times/5594887

答案 5 :(得分:1)

我对这个问题的解决方案是:

  1. 下载新的配置文件
  2. 双击配置文件以进行安装
  3. 转到Mac上的以下目录: /Users/<your.username>/Library/MobileDevice/Provisioning Profiles
  4. 找到您不再需要的旧配置文件(但不断显示在Xcode中)。这可能会在此步骤中派上用场:https://github.com/chockenberry/Provisioning
  5. 删除它
  6. 完全退出Xcode
  7. 重新打开Xcode
  8. 您现在应该可以选择新的配置文件

答案 6 :(得分:0)

就我而言,使用XCode 5,当我的开发人员证书过期时,我遇到了这个问题。我手动下载了新证书和新配置文件。我将证书添加到钥匙串,并将配置文件添加到组织者中的设备。

然而,XCode一直在抱怨我无法签署应用程序。我认为在XCode 5首选项中,它仍然显示旧的配置文件,尽管我在那里做了很多重新加载,但它没有刷新到新的配置文件。

最后,我使用iPhone配置实用程序删除旧的配置文件并添加新下载的配置文件。代码签名按预期工作。

答案 7 :(得分:0)

我认为双击下载的配置文件会将其放入xCode Organizer Archive,但这对我不起作用。以下步骤最终对我有用。

  1. 打开xCode
  2. 转到产品 - &gt;目的地 - &gt; iOS设备
  3. 转到产品 - &gt;归档

答案 8 :(得分:0)

大多数答案对我不起作用,因为它们似乎适用于旧版本。

对于Xcode 8.3.2:

  1. Xcode-&GT;首选项&GT;帐户
  2. 选择Apple ID
  3. 双击您的团队
  4. 点击左下角的“+”下拉菜单“创建证书”
  5. 选择iOS开发
  6. 点击“完成”
  7. 执行此操作后,我可以通过单击Targets-&gt; General-&gt; Signing并确认'Created'日期下的“Xcode Managed Profile”旁边的“i”信息图标来告诉Xcode使用最新的个人资料反映了新的一个。