Contexte:
Les projets de l'entreprise sont de plus en plus gros et l'application a pris de plus en plus d'affaires. Certains modules métiers doivent être copiés dans d'autres applications de l'entreprise. Nous avons décidé de transformer l'application en composants.
Changer de source Ruby
Afin d'améliorer l'efficacité, nous gem source
passerons à la Ruby
source domestique USTC.
gem sources # 列出默认源
gem sources --remove https://rubygems.org/ #移除默认源
gem sources -a https://mirrors.ustc.edu.cn/rubygems/ #添加科大源
复制代码
Basculer la source des spécifications Cocoapods
La source Cocoapods par défaut est 'https://github.com/CocoaPods/Specs.git'
que lorsque nous exécutons , pod update
le terminal y est bloqué car la vitesse de mise à jour à partir de l'adresse officielle est très lente. Afin d'améliorer l'efficacité, nous avons Spec
remplacé l'officiel par l'image de notre université domestique Tsinghua.
$ cd ~/.cocoapods/repos
$ pod repo remove master
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master
复制代码
créer une bibliothèque privée
projet de modèle de cocopode
Créé par pod lib create
commande 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
复制代码
Selon la question et la réponse, entrez l'option correspondante, 强烈建议一定要包含一个demo应用
.
Adresse de l'entrepôt des composants associés
Créez un référentiel de code privé sur gitee LYHelloComponent
, associez le code local au référentiel de code privé distant et téléchargez-le
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
复制代码
Il convient de mentionner que nous devons appeler le projet project tag
, afin cocoapods
que le tag
code correspondant puisse être obtenu selon différentes versions.
Modifier la spécification de module
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
复制代码
Le dernier podspec
ressemble à ci-dessus :
s.version
: La version de la bibliothèque de modules.
s.homepage
: L'adresse de la page d'accueil de l'auteur, l'adresse doit être garantie d'être accessible normalement, sinon la vérification ne peut pas être passée.
s.source
: 源代码
L'adresse de stockage.
Ajouter un code d'entreprise
Nous sommes dans LYHelloComponent
le Classes
répertoire , créons-en un nouveau MyClass.swift
et ajoutons le code suivant :
// MyClass.swift
public struct MyClass {
public init (){
}
public func sayHello(){
print("say Hello")
}
}
复制代码
主工程
Cité dans 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.
}
}
复制代码
S'il n'y a pas de problème avec le test, nous le soumettrons au référentiel de code distant et mettrons en place une nouvelle version tag 0.1.1
.
Vérifier podspec
Une fois que le test local n'a pas de problème, nous devons utiliser le pob lib lint
validateur podspec
pour la validation.
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
: autoriser les podspec
avertissements.
2, --sources=https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
: Spécifie Spec
l'adresse de la source.
podspec
Une fois la vérification du fichier réussie, cela signifie que la production de notre bibliothèque privée locale est terminée.Ensuite, nous devons podspec
pousser la bibliothèque locale vers l' Spec
adresse source privée distante.
Créer une source Spec privée distante
Créer un référentiel d'index de spécifications
Créez un index de référentiel privé local et associez-le à 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`
复制代码
À ce stade, sous le .cocoapods
répertoire , un nouveau LYSpecsPrivate
dossier sera ajouté.
Publier et mettre à niveau des bibliothèques privées
Après avoir créé la bibliothèque d'index distante, nous devons lui envoyer le fichier podspec local 远程索引库
.
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
复制代码
Jusqu'à présent, nous avons réussi à pousser la bibliothèque privée locale vers la bibliothèque privée distante.
Utiliser la bibliothèque privée
De retour dans le projet de test, supprimez Podfile
les références locales dans. Podfile
Le contenu est le suivant :
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, pointent respectivement vers deux
Spec源
, l'un est官方的Cocopods源
et l'autre est我们的私有源
.
Nous avons donc terminé ! ! ! !
Ici, nous introduisons principalement le processus de production de la bibliothèque privée Pod. Dans le prochain article, je résumerai les problèmes que j'ai rencontrés dans le processus de création de composants.