fundo:
Os projetos da empresa estão cada vez maiores e o app tem feito cada vez mais negócios. Alguns módulos de negócios precisam ser copiados para outros apps da empresa. Resolvemos transformar o app em componentes.
Alternar fonte Ruby
Para melhorar a eficiência gem source
, mudaremos para a Ruby
fonte doméstica USTC.
gem sources # 列出默认源
gem sources --remove https://rubygems.org/ #移除默认源
gem sources -a https://mirrors.ustc.edu.cn/rubygems/ #添加科大源
复制代码
Alternar fonte de especificações Cocoapods
A fonte padrão do Cocoapods é 'https://github.com/CocoaPods/Specs.git'
que quando executamos , pod update
o terminal fica preso lá porque a velocidade de atualização do endereço oficial é muito lenta. Para melhorar a eficiência, Spec
substituímos o oficial pela imagem da nossa Universidade Tsinghua doméstica.
$ cd ~/.cocoapods/repos
$ pod repo remove master
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master
复制代码
fazer biblioteca privada
projeto modelo cocoapod
Criado por pod lib create
comando pod库工程
.
pod lib create LYHelloComponent
复制代码
To get you started we need to ask a few questions, this should only take a minute.
If this is your first time we recommend running through with the guide:
- https://guides.cocoapods.org/making/using-pod-lib-create.html
( hold cmd and click links to open in a browser. )
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
复制代码
De acordo com a pergunta e resposta, digite a opção correspondente, 强烈建议一定要包含一个demo应用
.
Endereço do armazém do componente associado
Crie um repositório de código privado no gitee LYHelloComponent
, associe o código local ao repositório de código privado remoto e carregue-o
admin@MacBook-Pro ~/Desktop: cd LYHelloComponent
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git remote add origin https://gitee.com/DevalLee/lyhello-component.git
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git add .
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git commit -a -m "初次提交"
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git pull origin master --allow-unrelated-histories
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git push origin master
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git tag 0.1.0
admin@MacBook-Pro ~/Desktop/LYHelloComponent master: git push origin 0.1.0
复制代码
Vale ressaltar que precisamos chamar o projeto project tag
, para cocoapods
que o tag
código correspondente possa ser obtido de acordo com as diferentes versões.
Modificar podspec
Pod::Spec.new do |s|
s.name = 'LYHelloComponent'
s.version = '0.1.1'
s.summary = 'hello 测试工程'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
测试工程
DESC
s.homepage = 'https:/www.baidu.com'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '[email protected]' => '[email protected]' }
s.source = { :git => 'https://gitee.com/DevalLee/lyhello-component.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '9.0'
s.source_files = 'LYHelloComponent/Classes/**/*'
# s.resource_bundles = {
# 'LYHelloComponent' => ['LYHelloComponent/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
复制代码
O final podspec
fica como acima :
s.version
: a versão da biblioteca de pods.
s.homepage
: O endereço da página inicial do autor, o endereço deve ser garantido para ser acessível normalmente, caso contrário, a verificação não pode ser aprovada.
s.source
: 源代码
O endereço de armazenamento.
Adicionar código comercial
Estamos no diretórioLYHelloComponent
, criamos um novo e adicionamos o seguinte código:Classes
MyClass.swift
// MyClass.swift
public struct MyClass {
public init (){
}
public func sayHello(){
print("say Hello")
}
}
复制代码
主工程
Citado em LYHelloComponent
:
// ViewController.swift
import UIKit
import LYHelloComponent
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let v = MyClass()
v.sayHello()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
复制代码
Se não houver nenhum problema com o teste, nós o enviaremos para o repositório de código remoto e configuraremos uma nova versão tag 0.1.1
.
Verificar podspec
Após o teste local não apresentar nenhum problema, precisamos usar o pob lib lint
validador podspec
para validação.
pod lib lint --allow-warnings --sources=https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
复制代码
-> LYHelloComponent (0.1.1)
- WARN | description: The description is shorter than the summary.
- WARN | url: There was a problem validating the URL https:/www.baidu.com.
- WARN | [iOS] swift: The validator used Swift `4.0` by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_versions` attribute in your podspec. Note that usage of a `.swift-version` file is now deprecated.
- NOTE | xcodebuild: note: Using new build system
- NOTE | xcodebuild: note: Building targets in parallel
- NOTE | xcodebuild: note: Using codesigning identity override: -
- NOTE | xcodebuild: note: Build preparation complete
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Analyzing workspace
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')
LYHelloComponent passed validation.
复制代码
1, --allow-warnings
: permite podspec
avisos.
2, --sources=https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
: Especifica Spec
o endereço da fonte.
podspec
Depois que a verificação do arquivo for aprovada, significa que a produção de nossa biblioteca privada local foi concluída. Em seguida, precisamos podspec
enviar a local para o Spec
endereço de origem privado remoto.
Criar uma fonte de especificação privada remota
Criar repositório de índice de especificações
Crie um índice de repositório privado local e associe ao git
pod repo add LYSpecsPrivate https://gitee.com/DevalLee/lyprivate-spec.git
Ignoring psych-3.2.0 because its extensions are not built. Try: gem pristine psych --version 3.2.0
Cloning spec repo `LYSpecsPrivate` from `https://gitee.com/DevalLee/lyprivate-spec.git`
复制代码
Neste ponto, sob o .cocoapods
diretório , uma nova LYSpecsPrivate
pasta será adicionada.
Publicar e atualizar bibliotecas privadas
Depois de criar a biblioteca de índice remoto, precisamos enviar o arquivo podspec local para 远程索引库
ela.
pod repo push LYSpecsPrivate *.podspec --allow-warnings
Updating the `LYSpecsPrivate' repo
Adding the spec to the `LYSpecsPrivate' repo
- [Add] LYHelloComponent (0.1.1)
Pushing the `LYSpecsPrivate' repo
复制代码
Até agora, enviamos com sucesso a biblioteca privada local para a biblioteca privada remota.
Usar biblioteca privada
De volta ao projeto de teste, remova Podfile
as referências locais em. Podfile
O conteúdo é o seguinte:
source "https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git"
source "https://gitee.com/DevalLee/lyprivate-spec.git"
use_frameworks!
platform :ios, '9.0'
target 'LYHelloComponent_Example' do
pod 'LYHelloComponent'
target 'LYHelloComponent_Tests' do
inherit! :search_paths
end
end
复制代码
- 1, respectivamente apontam para dois
Spec源
, um é官方的Cocopods源
e o outro é我们的私有源
.
Então terminamos! ! ! !
Aqui, apresentamos principalmente o processo de produção da biblioteca Pod privada. No próximo artigo, resumirei os problemas que encontrei no processo de componentização.