"缺少加载命令"使用自己的静态框架和捆绑包上传应用程序时发送电子邮件

时间:2016-02-12 10:42:13

标签: ios frameworks

我在ObjC框架上工作,我们为客户提供他们自己的应用程序。它是一个静态库,可生成.framework文件(模拟器和iphoneos),然后我们将其创建到胖库中。为了使用CoreData并与iOS 7兼容,我们需要将.momd部分放在我们提供给客户端的单独的.bundle文件中。

现在,当我使用该框架和捆绑创建示例Swift应用程序并将其上传到App Store时,我在抱怨.bundle的加载命令后收到一封电子邮件:

  

缺少加载命令 - ' /Payload/TestSwift.app/TheBundle.bundle/TheBundle'中的可执行文件;没有必要的加载命令。尝试使用最新的Xcode版本重建应用程序。如果您使用的是第三方开发工具,请与提供商联系。

我不知道它想要什么。不幸的是,我提供者并且联系我自己没有帮助。

我已经用Google搜索并遵循了几条可用的说明:

  • remove generic versioning
  • 更新到最新的Xcode(邮件)
  • 上传到没有Bitcode的应用商店
  • 将框架放在嵌入式框架中,而不是链接框架和库
  • 使用ObjC应用程序中的框架

但邮件仍然会收到警告,并且不会上传内容。

知道如何解决这个问题吗?

重要提示:我想避开XY problem,但此处有更多信息:

  • 我们永久删除iOS7
  • 使用iOS8,应该可以创建一个动态的.framework文件,该文件直接包含CoreData,删除.bundle文件并简化客户端的流程。

在我潜入之前,这是一个有趣的解决方案吗?如果是,如何将静态库正确转换为动态库? .framework中用于加载.bundle的当前代码:

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TheBundle" ofType:@"bundle"]];   
NSString *modelPath = [bundle pathForResource:@"TheCache" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];

如果TheCache架构在.framework中,则假设代码:

NSBundle *bundle = [NSBundle mainBundle];
NSURL *modelURL = [bundle URLForResource:@"TheCache" withExtension:@"momd"];

谢谢。

2 个答案:

答案 0 :(得分:1)

这是我们刚刚发现的一个奇怪的问题,它与我们从主要的静态Lib构建一个单独的Bundle有关。如果您还要构建一个单独的包;

  • 转到Bundle的构建目标
  • 在构建设置中进行搜索 用于版本控制
  • 版本控制系统 Apple Generic 更改为

答案 1 :(得分:0)

我通过会员中心的技术支持向Apple询问。 我的核心问题是我的Bundle表现得像一个可执行文件,因为Compile Sources中有元素。

解决方案:

  1. 选择您的论坛目标
  2. 选择构建阶段
  3. 如果使用CoreData,请将YourFile.xcdatamodeld放入Copy Bundle Resources(不是像我这样编译源代码中)
  4. 清空编译源的所有项目(这里的元素暗示Bundle将被视为可执行文件)
  5. 运行您的捆绑目标
  6. 我建议在复制新生成的软件包之前手动删除主机项目中的先前软件包