1、将系统动态库导入Xcode
- 将系统动态库拖入Xcode中时可能会报错:
dyld[20219]: Library not loaded: @rpath/DVTPortal.framework/Versions/A/DVTPortal- @
rpath:framework在真机中的路径(真机中采用@rpath + framework中要调用的类的路径)
- @
- 解决方法:找到链接不到的framework所在路径,配置给
Runpath Search Paths(多个framework找不到可能要添加多个路径)// Config文件配置 LD_RUNPATH_SEARCH_PATHS = "/Applications/Xcode.app/Contents/SharedFrameworks/" "/Applications/Xcode.app/Contents/Frameworks"
2、手动拖framework进工程
手动拖framework进工程时,系统自动配置两项内容:
framework search path:去哪个路径去搜索frameworkFRAMEWORK_SEARCH_PATHS = "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"ld -framework:使用Other Linker Flags告诉链接器要链接的framework名称// Xlinker后面接的参数是直接传给链接器的,而不是Clang了 OTHER_LDFLAGS = -framework DevToolsCore -Xlinker -U -Xlinker _IDEInitializeXlinker:后面接的参数是直接传给链接器的,而非Clang了-U:要求链接器不要检查后边的符号(例中为_IDEInitialize符号)
3、内置库使用
-
内置库本身未提供头文件,因此需要网上找大神弄好的头文件,这样才能调用Api
-
文件直接导进去,可能因为路径问题会产生找不到的情况,因此可以选择不导入文件夹,而是直接在Config文件中配置
-
配置
Header Search Paths,让工程能按路径找到这些头文件(注意如果在Build Settings中手动改了会影响Config文件生效)// 放到了工程目录下的LZMod文件夹下 HEADER_SEARCH_PATHS = "${SRCROOT}/LZMod" -
在编写功能代码(模拟将文件拖入工程)
#import <Foundation/Foundation.h> #import "PBXProject.h" #import "PBXFileReference.h" #import "PBXGroup.h" BOOL IDEInitialize(int, NSError **error); int main(int argc, const char * argv[]) { NSError *error; BOOL initialized = IDEInitialize(1, &error); PBXProject *project = [PBXProject projectWithFile:@"/Volumes/Disk_D/test code/LZMod/LZMod.xcodeproj"]; PBXFileReference *re = [project fileReferenceForPath:@"要添加进工程的文件路径"]; if (!re) { [[project rootGroup] addFiles:@[@"要添加进工程的文件路径"] copy:NO createGroupsRecursively:NO]; } [project writeToFileSystemProjectFile:YES userFile:NO checkNeedsRevert:NO]; return 0; }