上一章讲了xcode 生成产品的进程及途径配备,还有 xcodeproj文件作用。今日来了解Xcode内置东西及pods调试。

一、Xcode内置东西

先来看看Xcode内置PlugIns有哪些:

iOS工程03-Xcode内置东西及pods调试
xcode是经过xcode3core这个距离来配备原文件相关xcodeproj工程文件的。
iOS工程03-Xcode内置东西及pods调试
我们发现上一章呈现的了解参数。

核心问题来了(ps:让我想到<一休哥>多动脑思考一下):
1.假设我们能调用这个系统动态库dyld(DevToolsCore)
2.经过系统动态库来调用内置东西
3.比方修正xcodeproj文件比较,举一反三。

1.将系统动态库导入Xcode

  • 将系统动态库拖入Xcode中时可能会运转报错:
dyld[20219]: Library not loaded:
    @rpath/DVTPortal.framework/Versions/A/DVTPortal
  • @rpath:framework在真机中的途径(真机中选用@rpath + framework中要调用的类的途径)

  • 解决方法:找到链接不到的framework地点途径,配备给Runpath Search Paths(多个framework找不到可能要添加多个途径)

    iOS工程03-Xcode内置东西及pods调试
    配备Config.xcconfig文件环境变量

LD_RUNPATH_SEARCH_PATHS = "/Applications/Xcode.app/Contents/SharedFrameworks" "/Applications/Xcode.app/Contents/Frameworks" "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
  • framework search path:去哪个途径去搜索framework
    iOS工程03-Xcode内置东西及pods调试
    在Config.xcconfig文件环境变量对应环境变量
FRAMEWORK_SEARCH_PATHS = "/Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Frameworks"
  • ld -framework:运用Other Linker Flags告知链接器要链接的framework称谓
OTHER_LDFLAGS = -framework DevToolsCore -Xlinker -U -Xlinker _IDEInitialize
  • Xlinker:后面接的参数是直接传给链接器的,而非Clang了
  • -U:要求链接器不要查看后边的符号(例中为_IDEInitialize符号)
  • 告知连接器忽略_IDEInitialize这个符号过错。
  1. 配备Header Search Paths,让工程能按途径找到这些头文件(留心假设在Build Settings中手动改了会影响Config文件收效
HEADER_SEARCH_PATHS = "${SRCROOT}"

2.在编写功用代码(模拟将文件拖入工程)

int main(int argc, const char * argv[]) {
  NSError *error;
  BOOL initialized = IDEInitialize(1, &error);
  PBXProject *project = [PBXProject projectWithFile:@"xxxxxx"];
  [[project rootGroup] addFiles:@[@"xxxxx.h"] copy:NO createGroupsRecursively:NO];
  [project writeToFileSystemProjectFile:YES userFile:NO checkNeedsRevert:NO];
  NSLog(@"%@", project);
  return 0;
}

编译成功:

iOS工程03-Xcode内置东西及pods调试

二、pods调试

iOS工程03-Xcode内置东西及pods调试
第二条是ruby调用三方库的流程。

1.ruby环境配备

也可参看ruby设备,现已设备或许会的同学就越过。

1.gem info ruby-macho
2.ruby -v  //查看版别
3.rvm list
4.bat ~/.zshrc //查看环境变量
5.vim ~/.bashrc //创立一个配备环境变量文件
6.source ~/.zshrc
7.echo $PATH
8.gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/
bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems

进程中遇到的问题调集:

iOS工程03-Xcode内置东西及pods调试
1.发现rvm list 并没有指定到具体版别:

rvm list known  //具体可以支撑版别
rvm install 2.7.3
//假设rvm 版别过旧更新
\curl -sSL https://get.rvm.io | bash -s stable
rvm -v

2.国内宽厚的改镜像地址

iOS工程03-Xcode内置东西及pods调试
3.配备IDE-VSCode
iOS工程03-Xcode内置东西及pods调试
4.设备VSCode插件

Ruby
Ruby Solargraph
Error Lens

iOS工程03-Xcode内置东西及pods调试

//验证是否设备 插件
gem info bundler
gem info ruby-debug-ide  
gem info debase
gem info rubocop
gem info solargraph
gem info rake
//没有设备就履行
gem install ruby-debug-ide 
//确保这些插件设备成功
//假设solargraph 无效履行如下代码
brew install coreutils
//查看设备途径
which solargraph

参看学习了:RVM 的设备和运用

2.pods调试

接下来,我们在xcode里用ruby调试pods。 留心:xcode的Ruby插件作用就是会生成一个调试文件launch.json

iOS工程03-Xcode内置东西及pods调试

1.配备VsCode-ruby

iOS工程03-Xcode内置东西及pods调试
name就是调试项目的称谓,program 就是ruby代码文件。一般bin目录存放rb文件。

1.bundle:的指令,在VSCode中也需要用(Gemfile)配备文件编写

iOS工程03-Xcode内置东西及pods调试
这些代码是不是很了解,就如我们podfile 文件代码差不多。
iOS工程03-Xcode内置东西及pods调试

2.pods调试

运用VSCode翻开CocoaPods-master

iOS工程03-Xcode内置东西及pods调试
创立调试文件launch.json修正”program”: “${workspaceRoot}/bin/pod” 然后在vscode终端履行:

bundle install

运转好久后:

iOS工程03-Xcode内置东西及pods调试
rake版别太旧也要更新。

Uncaught exception: You have already activated rake 13.0.3, but your Gemfile requires rake 12.3.3. Prepending `bundle exec` to your command may solve this.
[/Users/xx/.rvm/rubies/ruby-3.0.0/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:309](<> [/Users/xx/.rvm/rubies/ruby-3.0.0/lib/ruby/site_ruby/3.0.0/bundler/runtime.rb:25](<> 

iOS工程03-Xcode内置东西及pods调试
launch.json配备args 添加install

{
	"version": "0.2.0",
	"configurations": [
        {
			"name": "Debug xcodeproj",
			"type": "Ruby",
			"request": "launch",
			"program": "${workspaceRoot}/CocoaPods-master/bin/pod",
			"args":[
				"install",
				"--project-directory=./LGApp"
			]
		}
	]
}

iOS工程03-Xcode内置东西及pods调试
运转调试成功! (因为自己对工程化理解有限,我就记录我所知的东西)