为什么我无法为某些特定的iOS模拟器构建应用程序?

4
我有一个使用自己框架的应用程序,我让框架适配了i386和arm,一切都很好。我的应用程序过去可以在每个模拟器上运行,并且可以在商店中下载。
现在,由于某种原因,我无法在某些模拟器上运行我的应用程序。 可以工作的模拟器:
- iPhone 4s - iPhone 5 - iPad 2 - iPad Retina
无法工作的模拟器:
- iPhone 5S - iPhone 6 - iPhone 6S - iPad Air - Resizable iPhone - Resizable iPad
错误是找不到我的框架中的*.h文件。
我想知道什么会阻止找到这个文件,或者说哪些搜索路径没有与某些模拟器一起使用。除了我找不到任何会造成差异的项目/目标属性之外,肯定有一些项目/目标属性会影响这些模拟器类型。
在我的代码中,我已经搜索了任何可能的差异,但它们只与UI组件相关的iOS版本有关。我还使用了TARGET_IPHONE_SIMULATOR,但它不应该对模拟器之间产生任何影响。
FYI,我的应用程序现在包括Watch Kit。它在Apple Watch上以及连接到iPhone 5(外部显示器)的Apple Watch模拟器上运行。它可能与此有关......
非常感谢任何帮助!
编辑:完整的错误描述:
/Users/me/sources/myApp/iOS/trunk/include/someFile.h:18:10: 'dir/someOtherFile.h'文件未找到
编辑:所有目标中的头文件:
我的框架和包含任何框架.h的文件都只是myApp的一部分,我确保没有在myApp.watchkit或myApp.watchkitextension中添加任何引用。
编辑:尝试的解决方案:
- Xcode重启 - 重新启动 - +Alt+Shift+K - 删除派生数据
编辑:64位:
我在项目文件中使用了一些路径,例如: $(FRAMEWORK_SEARCH_PATHS)frameworkName_$(CURRENT_ARCH).framework/Versions/A/Headers 例如,当我为模拟器构建时,它会引用'/searchPathFolder/frameworkName_i386.framework/...'。

看起来你在64位架构上遇到了问题。你能发一下完整的错误描述吗? - Daniil Korotin
请检查头文件在所有目标中是否为公共文件。 - Amin Negm-Awad
可能是与64位架构有关,我会进一步检查它。 - Rémi Belzanti
1个回答

3
已解决。问题出在我的框架上,由于某种原因,它没有为64位模拟器版本进行构建。
为了使一切正常工作,此项目需要4个版本的框架:x86(32位模拟器),x64(64位模拟器),armv7(32位设备)和arm64(64位设备)。
然后,通过项目属性,在构建时可以简单地忽略不必要的框架: ignoring file myFramework_i386.framework/myFramework_i386, file was built for archive which is not the architecture being linked (arm64)

我需要关于构建框架的帮助。如何构建一个能够在所有设备和模拟器上运行的框架?任何提示都将是很大的帮助。 - abhimuralidharan
@abhi1992 你可以使用这篇很棒的文章 [https://medium.com/@syshen/create-an-ios-universal-framework-148eb130a46c](https://medium.com/@syshen/create-an-ios-universal-framework-148eb130a46c) - Hadi zamani

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