我正在try 为iOS编译libcpr个版本.我已经使用CMake和Xcode生成器构建了CPR.这已经生成了一个.xcodeproj,我已经将其导入(阅读拖放)到我的Xcode项目中.问题出在我try 导入库头时,找不到它们:

// currently with quote notation but also tried with bracket notation
#import "cpr/cpr.h" // NOT FOUND

你可以看到关于我如何在respective github issue中构建项目的更详细的步骤.

我可以看到该子项目不仅包含libcpr的标头,还包含libcurl和zlib的标头(这也是必需的):

enter image description here

我能找到的关于Xcode和库头文件的所有信息似乎都是一些手动步骤,比如复制头文件,这至少很容易出错.另一个选项似乎是修改生成设置中的User Header Search Paths属性.我try 将User Header Search PathsHeader Search Paths设置为指向文件夹:

enter image description here

我try 了其中的许多值:Libraries/**$(PROJECT_DIR)/../cpr/build(我已经添加了libcpr repo作为子模块,因此这是构建输出文件夹)和许多其他变体.毫无办法.

我目前的进步是Here is the repo美元.要生成构件,请执行以下操作:

  • 初始化子模块
  • cd cpr
  • mkdir build && cd build && cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../../ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_STRICT_TRY_COMPILE=ON -DDEPLOYMENT_TARGET=13.0 -DBUILD_SHARED_LIBS=OFF
  • 在编译之前,您必须修复一个头文件上的隐式转换(cpr/include/body.h只需在弹出错误的行中添加(Int))
  • cmake --build . --config Release

这将生成构件,并且您应该能够从根repo打开iOS文件夹中的.xcodeworkspace文件.

如有任何帮助,将不胜感激!

推荐答案

伟大的发现,奥斯卡!

因此,问题实际上是Xcode不知道在哪里找到头文件,而解决方案(正如您已经发现的)只是使用正确的搜索路径.您必须使用HEADER_SEARCH_PATHS(USER_HEADER_SEARCH_PATHS只适用于报价包含).

diff --git a/ios/libcprtest.xcodeproj/project.pbxproj b/ios/libcprtest.xcodeproj/project.pbxproj
index f16a88c..38d64da 100644
--- a/ios/libcprtest.xcodeproj/project.pbxproj
+++ b/ios/libcprtest.xcodeproj/project.pbxproj
@@ -599,6 +599,7 @@
                                        "\"$(PODS_ROOT)/boost\"",
                                        "\"$(PODS_ROOT)/Headers/Private/React-Core\"",
                                        "\"$(PODS_TARGET_SRCROOT)/include/\"",
+                                       "\"$(SRCROOT)/../cpr\"/**",
                                );
                                INFOPLIST_FILE = libcprtest/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = (
@@ -619,7 +620,7 @@
                                PRODUCT_NAME = libcprtest;
                                SWIFT_OPTIMIZATION_LEVEL = "-Onone";
                                SWIFT_VERSION = 5.0;
-                               USER_HEADER_SEARCH_PATHS = "Libraries/**";
+                               USER_HEADER_SEARCH_PATHS = "";
                                VERSIONING_SYSTEM = "apple-generic";
                        };
                        name = Debug;
@@ -672,6 +673,7 @@
                                        "\"$(PODS_ROOT)/boost\"",
                                        "\"$(PODS_ROOT)/Headers/Private/React-Core\"",
                                        "\"$(PODS_TARGET_SRCROOT)/include/\"",
+                                       "\"$(SRCROOT)/../cpr\"/**",
                                );
                                INFOPLIST_FILE = libcprtest/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = (
@@ -691,7 +693,7 @@
                                PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
                                PRODUCT_NAME = libcprtest;
                                SWIFT_VERSION = 5.0;
-                               USER_HEADER_SEARCH_PATHS = "Libraries/**";
+                               USER_HEADER_SEARCH_PATHS = "";
                                VERSIONING_SYSTEM = "apple-generic";
                        };
                        name = Release;

或者,您可以只添加包含目录(而不是递归搜索供应商的源/构建文件夹).

// from repo root
find ./cpr -type d -name include | xargs -I {} echo "\"\$(SRCROOT)/.{}\""
"$(SRCROOT)/../cpr/include"
"$(SRCROOT)/../cpr/build/include"
"$(SRCROOT)/../cpr/build/_deps/curl-src/plan9/include"
"$(SRCROOT)/../cpr/build/_deps/curl-src/include"

干杯!

Ios相关问答推荐

为什么iOS委派在KMM中不能正常工作?

如何在SwiftUI中基于嵌套视图中的状态动态显示外部视图的内容?

在iOS中使用Swift,即时更改应用语言后,立即改变外观会出现问题

iOS应用启动时崩溃问题解决方法-NO_CRASH_STACK-DYLD 4个符号丢失

当任何 TextEditor 有多于一行时,所有 TextEditor 都会调整大小

使用按位|带有布尔操作数

CoreML 不能并发(多线程)工作?

如何擦除 Swift 中的 Core Graphics Context 绘图?

如何使用 AppIntents 在 SwiftUI 应用程序中打开特定视图

SwiftUI 选项卡式视图防止滑动到下一个选项卡

用溢出的长文本对齐 Flutter 中的行和列

UIButton在iOS7中没有显示突出显示

以编程方式获取故事板 ID?

在 iOS 8 中显示相机权限对话框

刷新由 Xcode 7 管理的团队配置文件中的设备?

如何使用 swift 添加速率按钮的链接?

Swift 中的日期到毫秒和回溯到日期

如何在ios中生成UUID

为给定的 UIColor 获取更亮和更暗的 colored颜色 变化

在 SKScene 中设置按钮