同时使用Conan和CocoaPods /合并两个xcconfig文件



我有一个使用[Conan]https://conan编写的c++库。IO来管理库依赖关系。我想在React Native应用程序中使用该库。为了使用Native Modules Bridge,你需要使用[CocoaPods]https://cocoapods.org。CocoaPods和Conan都想在XCode中设置一个xcconfig来配置搜索路径。是否有办法将两者合并,或者结合使用这两种工具?现在我正在手动合并文件,这可以工作,但显然不是理想的。

我宁愿不把一切都切换到CocoaPods,因为这个库将在iOS/Cocoa以外的平台上使用。此外,我所依赖的库都是基于自动工具的,在柯南中更容易处理。或者,在CocoaPods中包装Conan包是否有一种简单的方法?

我最终通过制作一个本地CocoaPod podspec来解决这个问题,它只是封装了Conan项目并为它生成了一个CocoaPod。这在我的例子中非常有效,因为我只需要一个柯南依赖项。我想我也可以生成一个Conan项目,它只输出所需的所有头文件和库,如果我需要更多的库,它可能会工作得很好。我确实在我的Conan包中添加了一个选项,将所有依赖的库复制("导入")到构建文件夹中,这样我就不必为它们创建单独的pod了。以下是我的podspec大致的样子:

Pod::Spec.new do |spec|
spec.name = "Project"
spec.summary = "..."
spec.homepage = 'https://github.com/...'
spec.authors = "..."
spec.license = { :type => 'LGPL' }
spec.source = { :git => 'https://github.com/...' }
spec.version = "0.0.1"

spec.platform = :ios
spec.ios.deployment_target = '12.0'

spec.prepare_command = <<-CMD
conan install . -if build_ios-sim -pr:b=default -pr:h=ios-sim -b=missing -o copy_libs=True
conan build . -bf build_ios-sim
conan install . -if build_ios -pr:b=default -pr:h=ios -b=missing -o copy_libs=True
conan build . -bf build_ios
mkdir lib
for i in build_ios-sim/lib/*.a; do
f=`basename "$i"`
ls {build_ios,build_ios-sim}/lib/"$f"
lipo -create -output "lib/$f" {build_ios,build_ios-sim}/lib/"$f"
done
mkdir include
cp src/libname.h include/
CMD

spec.source_files = "include/*.h"
spec.ios.vendored_libraries = "lib/*.a"
spec.pod_target_xcconfig = { 'ONLY_ACTIVE_ARCH' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
end

与直接将Conan集成到XCode相比,这种技术的一个优点是可以生成通用库。我认为我已经正确地使用了lipo,尽管我还没有实际部署到iOS设备上进行测试。

最新更新