前言
本着工作暂无着落, 面试的东西又觉得没劲儿看的状态, 开始了我的Swift
第一天.
算法一起刷过一段, 对于Swift
我也属于0
基础, 以前很早学过一段, 但是多年不用不具备参考意义了
计划
第一阶段
基本上属于基础学习
复制代码
- 把自己的
Pod
仓库搭建了, 先建一个基础的学习语法的Pod
组件模块. - 把常用的足够刷题的一些基础的语法和知识记录一下.
第二阶段
开始从基础的数据结构刷起, 暂时打算是两道简单题, 两道中等题这样. 尽量找有代表性的.主要是做为记录
复制代码
- 数组, 链表, 队列, 栈, 树, 字典
- 回溯, DFS, BFS等.
第三阶段
整个UI框架系统学习, 然后结合以前的一些很少用的设计模式, 从0开始慢慢学.慢慢做.
复制代码
- 继承结构
- 做一个小型项目, 扒点接口
第四阶段
有了基础之后, OC的特性, 什么KVC, KVO等一些机制逐步 各种机制和Swift相对比之下的优化和差异.
更能了解语言的优势, 包括对网络层, 数据库等.
以及说UI的界面优化等.
复制代码
- 相对有比较性, 以及有点深度的去学一点东西.
总结
尽自己的最大努力学习吧, 对于普通人而言, 历史永远都在认证着不进则退.
其实真相是, 你想混吃等死, 你也得保持好的学习态度和状态, 你才有可能不进不退.
不管做什么事, 不管热情在哪儿, 优先要保持的就是与时俱进的学习.
创建Pod仓库
今天先来把Swift的仓库和简单的组件做了, 下面仅用于记录.
官方文档
-
- github上面创建一个公开仓库, Choose a license选择mit, 加上README.
-
- 拿到刚刚创建的git仓库的地址讲仓库拉到本地.(我的叫JKSwiftSpec)
-
- pod repo add JKSwiftSpec xxx.git
-
- 测试一下
open .cocoapods/repos
使用命令打开本地pod仓库
看看是否有JKSwiftSpec
文件夹
如果有的话就是拉取成功了
这就是我们自己的公开仓库.
创建Pod组件
随便找一个目录下, 假设我们在桌面. 我创建的库名叫做JKSwiftZero
-
pod lib create JKSwiftZero
- 成功会自动弹出
Pod
项目, 桌面会有一个JKSwiftZero
的文件夹, 下面有
整个项目的文件下面有图. - 下面就是选择的时候根据自己的需要选择, 最后两个是要集成一些测试框架.一般不需要
What platform do you want to use?? [ iOS / macOS ]
>
ios
What language do you want to use?? [ Swift / ObjC ]
>
swift
Would you like to include a demo application with your library? [ Yes / No ]
>
yes
Which testing frameworks will you use? [ Quick / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
复制代码
-
- 然后打开
Example
工程中的工程.add files to ....
, 如下图:
- 然后打开
把工程外面的JKSwiftZero
拉进项目. 就可以做修改.注意事项如下:
1.只勾选Create groups即可, 不要copy, 也不要和工程设置依赖Add to targets.
2.移除的时候,不要remove to crash, 只需要从项目中移除即可. 不然外部文件也会受损.
-
- 我们可以修改我们工程了, 直接在
Example for JKSwiftZero
内部刚刚拉进去的地方修改.
- 移除掉原来的replaceMe, .gitkeep等文件, 自己新建文件.
- 我们可以修改我们工程了, 直接在
-
- 直接在项目最顶层的结构里面找到
JKSwiftZero.podspec
, 这个路径是和最外面的是同一份文件, 在这里改就可以. 下面是要改的地方:
- 直接在项目最顶层的结构里面找到
Pod::Spec.new **do** |s|
s.name = 'JKSwiftZero'
s.version = '1.0.0'
s.summary = 'JKSwiftZero 从0开始学习'
s.description = <<-DESC
TODO: Add long description of the pod here.一些描述
DESC
s.homepage = 'https://github.com/nbkey/JKSwiftZero'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'nbkey' => 'jigk@winning.com.cn' }
s.source = { :git => 'https://github.com/nbkey/JKSwiftZero.git', :tag => s.version.to_s }
s.ios.deployment_target = '10.0'
s.source_files = 'JKSwiftZero/Classes/**/*'
#s.resource_bundles = {
# 'JKSwiftZero' => ['JKSwiftZero/Assets/*']
#}
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
**end**
复制代码
homepage
:github
:私有库的访问一般不带.git
, 我们现在还没创建.source
:github
:私有库上传的地址.resource_bundles
:资源文件source_files
:编码文件version
: 版本号
接着如下:
然后重新pod install
, 项目就编程了下图所示:
swift
的类, 想要访问的需要用public
修饰, 不然是无法访问的. 只需要导入库名, 不需要导入单独的文件名. 还有一些其他的修饰符, 我还没系统的看, 后续在说.
修改完Podspec
以及删除文件之后, 本地安装没问题了, 就可以上传云了.
-
- 去
github
创建一个公开库, 拿到地址.
- 去
git add .
git commit -m '第一次初始化'
git remote add origin https://github.com/nbkey/JKSwiftZero.git
git push origin master (有时候会显示443, 有些人设置代理, 也可以一直试, 一会儿好一会儿坏的)
git tag '1.0.0'
git push --tags
/**git 使用的一些记录**/
git remote show origin (这个命令可以查看追踪关系)
git push -u origin master
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
git config --global push.default simple
matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。
复制代码
这个时候远程的私有库就已经有了.
-
- 接下来把
JKSwiftZero
库, 加入到自己的# JKSwiftSpec
里面
- 接下来把
1. 验证自己是否有pod账号, 没有的话有提示, 根据提示configure一下就可以
pod trunk me
2. 本地验证, 这个步骤还是挺慢的, 必须要验证合法性, 通过了才可以上传, 最好是先本地.
pod lib lint
这里会报错, 看图7. 我们修改项目中的swift依赖最低设置为5.0.
2.1 修改build setting的Swift Language Version修改为5.0, pod一样修改
2.2 修改工程的 iOS Deployment Target 为10.0
2.3 修改Podfile的 platform :ios, '10.0'
pod lib lint --allow-warnings 这样继续验证就通过警告了
3. 网络验证, 警告可以取消, 报错一定要解决. verbose是为了错误的显示更全, --allow-warnings是为了忽略警告, --no-clean
pod spec lint --verbose --allow-warnings
4. 这个命令是加到cocoapods的库中, 当包含了.a的静态库无法验证通过, 需要--use-libraries来通过验证
pod trunk push JKSwiftZero.podspec --verbose --allow-warnings
5. 这个命令是加到自己创建的JKSwiftSpec库中,
pod repo push JKSwiftSpec JKSwiftZero.podspec --verbose --allow-warnings
//一些注意事项
//可以查看所有命令
pod lib lint --help (查看所有可选参数,可选参数可以加多个)
// Podfile中开启此功能可以做多个小工程
install! 'cocoapods', :generate_multiple_pod_projects => true
//目录分层需要设置,
s.subspec ‘目录名’ do |ss|
ss.scoure_files = ‘Classes/目录名/**/*’
//vendored_libraries:配置需要引用的非系统静态库(要注意,这里的.a静态库名字必须要带lib前缀,如果引用的静态库名字没lib前缀会导致编译报错,只需要重命名加上即可)
vendored_libraries = 'Frameworks/libZCPKit.a'
//子层级之间不能进行依赖, 互相依赖repo就提交不成功, 子层级之间要解耦
//resource_bundles放到子工程去添加, 主工程会使用asset会一直验证不通过.
end
复制代码
看到什么443
, http2
的报错, 全都是网络的错, 太吐血了.
一些常见的坑
pod库总有会这样那样一些问题
resource_bundles验证不通过的问题
- 上面有写, 放在一个子工程里面, 导入路径就可以了.
s.subspec 'Public' do |ss|
ss.resource_bundles = {
'PublicImg' => ['ServicePublic/Assets/*.png'],
'PublicSql' => ['ServicePublic/Classes/Public/SQL/UserDataTable/*.sql'],
'PublicXib' => ['ServicePublic/Classes/Public/**/*.xib']
}
end
**/* 也可以
复制代码
私有库同时依赖了私有库以及公开库的问题?
- 设置
dependency
即可
私有库在push到podspec的索引仓库时的效验问题?
- 在
pod repo push JKSwiftSpec JKSwiftZero.podspec --verbose --allow-warnings
后面加上--skip-import-validation
- 跳过
import
效验 - 一定要保证在壳工程没有问题, 才可以pod上去.
获取私有库的图片, nib等资源问题?
- 主要是需要一个pod工程的类, 通过
Boundle
的rescourePath
+拼接硬编码去拿对应的bundle
以及其他的文件.
OC
随便搜下很多
发布的新的podspec没有更新到组件的库的git上.
- pod cache clean –all
- pod update
- pod install
总结
不是很顺利, 网络问题, 推个仓库推了俩小时…好事多磨吧, 万事开头难.
pod地址
慢慢坚持…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END