Composantisation iOS - production de bibliothèque privée

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 sourcepasserons à la Rubysource 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 updatele 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 Specremplacé 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
复制代码

Capture d'écran 2021-09-27 20.15.09 pm.png

créer une bibliothèque privée

projet de modèle de cocopode

Créé par pod lib createcommande 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

Capture d'écran 2021-09-27 20.32.05 pm.png

 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 cocoapodsque le tagcode 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 podspecressemble à 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 LYHelloComponentle Classesrépertoire , créons-en un nouveau MyClass.swiftet ajoutons le code suivant :

Capture d'écran 2021-09-27 20.56.26 pm.png

// 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 lintvalidateur podspecpour 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 podspecavertissements.

2, --sources=https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: Spécifie Specl'adresse de la source.

podspecUne 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 podspecpousser la bibliothèque locale vers l' Specadresse source privée distante.

Créer une source Spec privée distante

Créer un référentiel d'index de spécifications

Capture d'écran 2021-09-27 21.20.41 pm.png

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 .cocoapodsrépertoire , un nouveau LYSpecsPrivatedossier sera ajouté.

Capture d'écran 2021-09-27 21.25.25 pm.png

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 Podfileles références locales dans. PodfileLe 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.

Je suppose que tu aimes

Origine juejin.im/post/7012608202370088968
conseillé
Classement