프레임 워크 스위프트 도로 (다음)의 구성 요소 CocoaPods 만들기

체제 : Mac OS 10.15.2, 엑스 코드 11.3, 신속한 5.0
작성 시간 : 2019년 12월 23일

1. 설명

개발 iOS 앱은 기본적으로 처음부터 내장 아니오. 시스템 때문에 등 UIKit, 재단, 웹킷, MapKit, 같은 프레임 워크의를 제공, GitHub의 많은 오픈 소스 프레임 워크가 Alamofire , 킹 피셔 등등합니다.

정적 및 동적 라이브러리 라이브러리의 차이.

  1. 도서관 정적 - 컴파일시에 링크 된 코드 링크, 미래는 변경되지 않습니다.

그러나 아이폰 OS 라이브러리가 정적 허용되지 않습니다 images/assets(단지 코드). Quxianjiuguo 방법은 가입 번들을 사용하는 것입니다 images/assets.

  1. Dynamic library- 코드 또는 assets내용이 변경됩니다 내부 실행시에 연결된 링크하는 런타임.

그러나, 애플은 공식적으로 아이폰 OS 만들 수 동적 라이브러리를 . 동적 라이브러리 프로젝트가있는 경우 응용 프로그램이 실패 검토 할 것입니다.

  1. 프레임 워크 - 컴파일 된 코드가 작업 ... 그래서 달성하기 위해 프레임 워크 , 그래픽 리소스 파일, 스토리 보드, 문자열을 포함 할 수있다, 정적 프레임 워크 , 동적 프레임 워크 또는 기타 프레임 워크 . 버전 관리를, 그리고 나눌 수 있습니다 (아이폰 OS 8 나중에 만들 수)

이 문서에서는 프레임 워크는 Alamofire 타사 프레임 워크에 따라 작성되었습니다.
처음부터 따라 프레임 워크되지 않습니다 만든, 참조하시기 바랍니다 - 에서 프레임 워크 스위프트 도로 CocoaPods의 구성 요소 만들기 (에)

2. 프로젝트 다운로드

https://github.com/zgpeace/IceCreamShopFramework
여기 포함

  1. 프로젝트의 시작 IceCreamShop_Starter를
  2. 완료 된 프로젝트 : IceCreamShop_Finisher
  3. 프레임 워크 : 도서관 / RWPickFlavor
    그림 삽입 설명 여기

프레임 워크를 생성합니다

파일> 신규> 프로젝트> 프레임 워크 및 라이브러리> 프레임 워크
그림 삽입 설명 여기
다음, Product Name쓰기 RWPickFlavor 새로운 라이브러리에 저장이, 내부 폴더에
그림 삽입 설명 여기
새로운 Podfile 파일

cd ~/yourProjectPath/Libraries/RWPickFlavor
pod init
open -a Xcode Podfile

다음과 같이 Podfile 내용 작성

platform :ios, '12.0'

target 'RWPickFlavor' do
    pod 'Alamofire', '~> 4.7'
    pod 'MBProgressHUD', '~> 1.1.0', :modular_headers => true
end


이 방법은 프레임 워크의 구성 요소는 타사에 의존하고있을 것이다 Alamofire,
MBProgressHUD.

4. 스위프트 정적 라이브러리

4.1 CocoaPods 버전 이하 1.5.0보다 CocoaPods 정적 라이브러리를 사용할 수 없습니다. 포드는 스위프트 코드에 Podfile에 표시해야합니다 포함되어있는 경우 use_frameworks!. CocoaPods를 1.5.0 후, CocoaPods 당신은 정적 라이브러리 정적 라이브러리를 사용할 수 있습니다!

당신이 Podfile에서 생략하면 use_frameworks!, CocoaPods는 정적 라이브러리 정적 라이브러리와 프레임 워크를 대체합니다. 귀하의 Objective-C전송 될 의존적으로 통합 모듈의 요구를, 그러나. MBProgressHUD인가 Objective-C종속 모듈이 지원되지 않습니다. 다행히도, 다시 MBProgressHUD 따라 증가 스크립트 :modular_headers => true, CocoaPods 모듈 지원이 추가되었습니다.

4.2 포드 종속 라이브러리

pod install

4.3 새 프로젝트를 열기

open RWPickflavor.xcworkspace

열기 프로젝트보기는 엑스 코드
그림 삽입 설명 여기
RWPickflavor 프레임 워크 IceCreamShop - STATER 내부 폴더 다음과 같은 다섯 개 사본에서 4.4 프로젝트를. (폴더 : 범주는이 컨트롤러, 모델, 조회수
, 자료)
그림 삽입 설명 여기
RWPickflavor 폴더에 표시는 다음과 같습니다 :
그림 삽입 설명 여기
4.5 다음 프로젝트를 열고 RWPickFlavor.xcworkspace, ▸ 파일을 선택하여 Add Files to “RWPickFlavor”아래와 같이 프로젝트에 추가 된 다섯 개 개의 새로운 폴더를 추가 ... :
그림 삽입 설명 여기

4.6 열기 RWPickFlavor Images.xcassets삭제, AppIconlogo이미지.

4.7 프로젝트 RWPickFlavor xcworkspace, 우리는 것을 확인해야 Main.storyboard객체가 세 개의 객체 다음 확인 링크에서 올바른 링크는 다음과 같습니다

  1. 당신의 맛을 선택
  2. Ice Cream View
  3. Pick Flavor Data Source
    그림 삽입 설명 여기
    因为拷贝storyboard到不同的工程project, 你需要确认上面的对象的Module都设置为CocoaPod的工程RWPickFlavor. 记得保存Command-S.
    그림 삽입 설명 여기

5. 工程IceCreamShop-Stater移除多余文件

  1. 在文件夹中IceCreamShop-Stater打开工程IceCreamShop.xcworkspace, 删除下面4个文件夹
  • Categories
  • Controllers
  • Models
  • Views
  1. 打开Info.plist文件,找到分组Supporting Files group, 删除行Main storyboard file base name

  2. 打开工程中中的Images.xcassets, 删除 background images。

  3. 运行工程,显示的是一个黑屏。

创建Pod的最困难的部分已经完成!恭喜!
그림 삽입 설명 여기

6. 创建Github仓库

  1. 创建一个新的仓库给Framework用
    그림 삽입 설명 여기
    仓库名字为RWPickFlavor,笔者新建的仓库链接如下:
    https://github.com/zgpeace/RWPickFlavor

  2. 新建另一个仓库给Podspec用,名字命名为RWPodSpecs,并勾选初始化README。 CocoaPods要求pod specs repo至少有一个提交,否则不工作.
    链接如下:
    https://github.com/zgpeace/RWPodSpecs

7. 设置Podspec

如果没有Podspec, RWPickFlavor 只是一堆文件. PodspecCocoaPod的描述信息. Podspec包括pod的名字,版本,Git下载地址URL.

你需要为RWPickFlavor创建创建RWPickFlavor.podspec. 执行如下命令:

cd ~/yourProjectPath/Libraries/RWPickFlavor
pod spec create RWPickFlavor
open -a Xcode RWPickFlavor.podspec

RWPickFlavor.podspec里面的内容,替换为:

Pod::Spec.new do |s|

# 1
s.platform = :ios
s.ios.deployment_target = '12.0'
s.name = "RWPickFlavor"
s.summary = "RWPickFlavor lets a user select an ice cream flavor."
s.requires_arc = true

# 2
s.version = "0.1.0"

# 3
s.license = { :type => "MIT", :file => "LICENSE" }

# 4 - Replace with your name and e-mail address
s.author = { "Keegan Rush" => "[email protected]" }

# 5 - Replace this URL with your own GitHub page's URL (from the address bar)
s.homepage = "https://github.com/TheCodedSelf/RWPickFlavor"

# 6 - Replace this URL with your own Git URL from "Quick Setup"
s.source = { :git => "https://github.com/TheCodedSelf/RWPickFlavor.git", 
             :tag => "#{s.version}" }

# 7
s.framework = "UIKit"
s.dependency 'Alamofire', '~> 4.7'
s.dependency 'MBProgressHUD', '~> 1.1.0'

# 8
s.source_files = "RWPickFlavor/**/*.{swift}"

# 9
s.resources = "RWPickFlavor/**/*.{png,jpeg,jpg,storyboard,xib,xcassets}"

# 10
s.swift_version = "4.2"

end

8. 创建许可证License

像其它pod, 你需要创建LICENSE许可证文件.

比如拷贝MIT License 的内容, 并保存为文件名为LICENSE — 没有扩展名 — 到路径~/yourProjectPath/Libraries/RWPickFlavor. 比替换内容里面的年份[year] 和 名字[fullname] !

Choose a License 这是一个特别好的网站,帮助你如何选择一个适合你的开源open-source license.

9. 推送到Git

把Pod推送到远程git,替换掉 [Your RWPickFlavor Git URL]为你的git地址(比如笔者的https://github.com/zgpeace/RWPickFlavor).

cd ~/Documents/Libraries/RWPickFlavor
git init
git add .
git commit -m "Initial commit"
git tag 0.1.0
git remote add origin [Your RWPickFlavor Git URL]
git push -u origin master --tags

恭喜你,完成了你的第一个有依赖的Framework。
그림 삽입 설명 여기

Last one more thing…

10. 应用你新建的CocoaPod

首先需要把你的Podspec增加到私有仓库private specs repo; 这个让CocoaPods找到你安装的pod. 幸运的是, 你已经创建了为Podspec创建了Git 仓库.

在RWPickFlavor路径下,输入一下命令。替换掉[Your RWPodSpecs Git URL]为你的Podspec的路径(比如笔者的为:https://github.com/zgpeace/RWPodSpecs):

pod repo add RWPodSpecs [Your RWPodSpecs Git URL]
pod repo push RWPodSpecs RWPickFlavor.podspec

上面标示创建了本地的RWPodSpecs 保存在你机器的路径~/.cocoapods, 并把RWPickFlavor.podspec推送到了里面.
그림 삽입 설명 여기
最后在Starter的工程里面,替换掉Podfile的内容如下:

platform :ios, '12.0'

source 'https://github.com/CocoaPods/Specs.git'
source '[Your RWPodSpecs Git URL Goes Here]'

target 'IceCreamShop' do
  pod 'RWPickFlavor', '~> 0.1.0'
  pod 'MBProgressHUD', '~> 1.1.0', :modular_headers => true
end

确保替换掉[Your RWPodSpecs Git URL Goes Here] 为你的RWPodSpecs的Git地址(比如笔者的为:https://github.com/zgpeace/RWPodSpecs). 你不需要包含AlamofirePodfile, 以为依赖以及配置好在RWPickFlavor.podspec. 你需要增加一行给MBProgressHUD,这样子可以增加配置信息:modular_headers => .

运行

pod install

替换掉AppDelegate.swift的内容如下:

import UIKit
import RWPickFlavor

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  
  // MARK: Instance Variables
  var window: UIWindow?
  
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = createRootViewController()
    window?.makeKeyAndVisible()
    
    return true
  }
  
  func createRootViewController() -> UIViewController {
    let bundle = Bundle(for: PickFlavorViewController.self)
    let storyboard = UIStoryboard(name: "Main", bundle: bundle)
    return storyboard.instantiateInitialViewController() ?? UIViewController()
  }
  
}

运行的时候发现错误,重复的Images.xcassets, XCode 10 以后不能有重复的内容,要不删掉项目的,或者File > Workspace Setting > Build System > Legacy Build System.
그림 삽입 설명 여기

最终运行起来:
그림 삽입 설명 여기

参考

https://www.raywenderlich.com/5823-how-to-create-a-cocoapod-in-swift

https://stackoverflow.com/questions/15331056/library-static-dynamic-or-framework-project-inside-another-project

https://www.vadimbulavin.com/static-dynamic-frameworks-and-libraries/

https://stackoverflow.com/questions/50718018/xcode-10-error-multiple-commands-produce

게시 된 127 개 원래 기사 · 원 찬양 12 ·은 20000 +를 볼

추천

출처blog.csdn.net/zgpeace/article/details/103640985