第20月第29天 cocoa抽象工廠 cocoapods組件化 cocoapods升級

1.html

在 Cocoa Touch 框架中,類簇是抽象工廠模式在 iOS 下的一種實現,以 NSArray 舉例,將原有的 alloc+init 拆開寫:ios

id obj1 = [NSArray alloc]; // __NSPlacehodlerArray *
id obj2 = [NSMutableArray alloc];  // __NSPlacehodlerArray *
id obj3 = [obj1 init];  // __NSArrayI *
id obj4 = [obj2 init];  // __NSArrayM *

發現 + alloc 後並不是生成了咱們指望的類實例,而是一個NSPlacehodlerArray 的中間對象,後面的 – init 或 – initWithXXXXX 消息都是發送給這個中間對象,再由它作工廠,生成真的對象。這裏的 NSArrayI 和 __NSArrayM 分別對應 Immutable 和 Mutable(後面的 I 和 M 的意思)git

因而順着思路猜實現,__NSPlacehodlerArray 一定用某種方式存儲了它是由誰 alloc 出來的這個信息,才能在 init 的時候知道要建立的是可變數組仍是不可變數組。github

抽象工廠將一系列的產品族統一到一塊兒建立,增長產品族很方便,但增長產品很麻煩,須要改動太多的類的接口。 ####生成器(Builder) 將一個複雜對象的構建與它的表現分離,使得一樣的構建過程能夠建立不一樣的表現。 生成器能夠將構建對象的過程分爲,客戶 – 指導者 – 生成器 的關係,數組

CharacterBuilder *characterBuilder = [[StandarCharacterBuilder alloc] init];
ChasingGame *game = [[ChasingGame alloc] init];

Character *player = [chasingGame createPlayer:characterBuilder];
Character *enemy = [chasingGame createEnemy:characterBuilder];

characterBuilder 就是生成器了,而 game 就是指導者。指導者裏聲明瞭建立不一樣表現的對象的方法。而方法裏由生成器 characterBuilder 來構建不一樣的 Character 類型的對象。ruby

  • 生成器模式將複雜的生成對象的過程交給了生成器去完成,做爲客戶的咱們只須要根據簡單的接口去生成不一樣表現的對象。如上述代碼中的 player 以及 enemy。玩家和敵人具體的屬性數值咱們不須要去設置,而是交給生成器去設置。

 

https://github.com/al1020119/iCocosDesignPattern框架

http://ios.jobbole.com/85360/post

https://draveness.me/2017-summaryui

 

2.git pod私有庫spa

 索引庫

  508  cd ~/.cocoapods/repos/

  509  ls

  510  history

  511  ls

  512  pod repo add MyRepo https://gitee.com/lianhuaren/MyRepo.git

代碼庫

 

  502  cd Desktop/mycode/

  503  ls

  504  mkdir QinzTool

  505  cd QinzTool/

  506  pod lib create QinzTool

  507  pwd

  508  ls

 

上傳模板文件

  509  cd QinzTool/

  510  ls

  511  git remote add origin https://gitee.com/lianhuaren/Tool.git

  512  git push -u origin master

  513  git pull

  514  git push -u origin master

  515  git pull

  516  git branch --set-upstream-to=origin/master master

 

  518  git pull

  519  git pull

 

  521  git pull origin master --allow-unrelated-histories

  522  git push -u origin master

  523  git push -u origin master -f

  524  history

 

將組件的代碼上傳

  526  git add .

  527  git commit -m "first"

  528  git push -u origin master

 

 

  529  pwd

  530  pod lib lint --private

  531  git tag 0.1.0

  532  git push --tags

  533  pod repo push MyRepo QinzTool.podspec 

 

source 'https://github.com/CocoaPods/Specs.git'
source 'https://gitee.com/lianhuaren/MyRepo'

platform :ios, '8.0'

target 'pods01' do
use_frameworks!

pod 'QinzTool', '~> 0.1.0'
pod 'AFNetworking' #公有庫


end

 

 

https://blog.csdn.net/m0_37402140/article/details/72801372

https://blog.csdn.net/shiren1118/article/details/7761203

 

https://www.jianshu.com/p/c1a215b9ddbe

 

 

 

 

more:

 

 1)

沒用sourcetree,不會git remote add, 致使失敗

也並非在~/.cocoapods/repos/HCocaPodsSpecsManager調用pod lib create HStarTools

 

若是在~/.cocoapods/repos/HCocaPodsSpecsManager調用命令,這樣HCocaPodsSpecsManager有.git,HStarTools又有.git

最後致使調用pod repo push HCocaPodsSpecsManager HStarTools.podspec出錯。

The repo `HCocaPodsSpecsManager` at `..` is not clean

 

https://www.jianshu.com/p/67a1d8385c80

 

 2)

 若是不用pod lib create QinzTool,開始出現問題。

- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.

https://www.jianshu.com/p/0c640821b36f

 

 

3) 

下面咱們把 pod push 到遠端:

git push --set-upstream origin master

下一步,咱們建立一個私有的 Spec 倉庫,這裏面存放的是咱們須要的 Pod 的索引,我在 Coding 上建立了一個 MySpec 倉庫,咱們先把它加到 CocoaPods 當中:

pod repo add MySpec git@git.coding.net:skyline75489/MySpec.git

這裏面如今仍是空的,下面咱們把 XXBaseHeaders push 到倉庫中,至關於發佈出去:

pod repo push MySpec XXBaseHeaders.podspec --allow-warnings

 

https://skyline75489.github.io/post/2016-3-19_ios_modularization_practice.html

 

 

3.

 

 

sudo gem install cocoapods

 

https://gems.ruby-china.com/

https://blog.csdn.net/potato512/article/details/62235282

相關文章
相關標籤/搜索