我有一个Xcode工作区,其中包含一个带有iOS应用程序目标的项目和另一个带有Framework目标的项目。框架目标依赖于另一个框架,该框架以xcframework
的形式集成:
使用常规OtherFramework.framework
要求将其链接到MyFramework
,然后将其嵌入MyApp
中,即使MyApp
不需要框架本身。但是,当与xcframework
集成时,此项目将无法构建,并出现No such module 'OtherFramework'
错误。
项目设置:
从OtherFramework.xcframework
目标中删除MyApp
可以解决构建问题,但是由于该应用程序中没有该框架,因此会导致library not loaded
错误。
此处的演示项目:https://github.com/msaps/XCFramework-Link-Issue
您打算如何在应用程序中链接xcframework
并在依赖框架中链接?
pyckamil刚刚发布了这篇文章,其中详细说明了该问题:Everything wrong with XCFrameworks。
事实证明,Xcode对ProcessXCFrameworkLibrary
步骤进行了优化,该步骤从.framework
中提取了正确的.xcframework
用于活动构建体系结构。只能运行一次,这会导致尝试链接同一框架的其他目标产生问题。
此问题已在Xcode 12.0中解决
答案 0 :(得分:1)
已更新-在Xcode 12.0中解决
shinsuk提出了一种可靠的解决方法,该方法通过添加体系结构明确的框架搜索路径来确保在XCFramework中找到正确的#[repr(C)]
pub struct VPNParameters {
pub address: *mut libc::c_char,
pub address_size: usize,
pub x: libc::c_int,
}
#[no_mangle]
pub extern "C" fn passParameters(vpnParameters: *mut VPNParameters)
{
// Note the asterisk operator
println!("{:?}", unsafe { (*vpnParameters).address });
}
。
详细信息可以在README中找到。
答案 1 :(得分:0)
我也有类似的问题。 首先,请确保MyFramework.framework文件与MyApp位于同一目录中。
第二,在构建MyFramework.framework时,请确保MyFramework的项目目录中还包含OtherFramework.xcframework。
还有一件事,请检查目标SDK版本。它们应该在同一水平上。
答案 2 :(得分:0)
检查构建设置,并定义指向包含相关框架的文件夹的框架搜索路径。如果将框架放在您的项目目录中,只需将框架搜索路径设置为$(SRCROOT)并将其设置为递归即可。
检查响应Getting error "No such module" using Xcode, but the framework is there
答案 3 :(得分:0)
在使用xcframework
而不是framework
之后,我也遇到了这个问题。因此,我更改了项目结构:
MyFramework Peoject
嵌入OtherFramework.xcframework
,然后使用@_exported import OtherFramework
中的MyFramework Peoject
将其导出。并且MyApp
仅链接MyFramework
,但可以导入/使用MyFramework
和OtherFramework
。
顺便说一句,似乎自定义了@rpath
并手动对OtherFramework
进行了代码签名。
答案 4 :(得分:0)
我和您有同样的问题,看到您的pbxproj后,我认为可以用相同的方法解决。
将框架搜索路径更改为递归(通过UI或手动编辑pbxproj "$(SRCROOT)/../Frameworks"
=> "$(SRCROOT)/../Frameworks/**"
),如下所示:https://github.com/msaps/XCFramework-Link-Issue/pull/1/files
答案 5 :(得分:0)
IMO,看来不是xcframework问题。
查看以下答案:https://stackoverflow.com/a/59435627/2661407
iOS,watchOS或tvOS不支持伞框架。
OtherFramework.xcframework应该签名并嵌入到您的主机应用中。
并将“ @ executable_path / Frameworks”设置添加到MyFramework.framework>构建设置>运行路径搜索路径中。