자작 라이브러리를 Swift Package Manager, Carthage, CocoaPods에 대응하여 공개할 때까지

Swift Advent Calendar 2부 의 12일째의 기사입니다.

라이브러리를 만들고 Swift Package Manager, Carthage, CocoaPods에 대응하여 공개하는 곳까지 해 보았으므로, 그 순서를 씁니다.

1. framework 만들기



프로젝트 만들기


$ mkdir UpdateChecker
$ cd UpdateChecker
$ swift package init --type library
$ swift package generate-xcodeproj

파일 구성





소스 추가



이전에 작성한 소스를 사용합니다.
· 【Swift3】 최신 버전의 설치를 촉구하는 경고 표시

Example 작성


$ mkdir Example
$ cd Example

빌드 설정



· Project 및 targets의 Base SDK와 Supported Platforms를 iOS로 변경
· skip install을 No로 변경

WorkSpace 추가



메뉴에서 Workspace를 선택하여 추가합니다.



왼쪽의 프로젝트 네비게이터를 마우스 오른쪽 버튼으로 클릭하고 메뉴에서 "Add Files to "UpdateChecker""를 선택하고,
UpdateChecker.xcodeproj와 Example/iOSExample.xcodeproj의 두 가지를 추가합니다.



추가가 끝나면 workspace를 다시 열어 보겠습니다.

Framework 추가



Example 프로젝트의 Embedded Binaries에 UpdateCheker의 framework를 추가합니다.



2. Sheme을 공유



Manage Shemes를 열고 shared에 체크하세요.


3. Swift Package Manager&Carthage 대응



・여기까지의 흐름으로 대응 완료하고 있습니다.

4. Github에 공개



현재까지의 부분을 커밋 & 푸시합니다.
먼저 불필요한 파일을 푸시하지 않도록 .gitignore를 편집합니다.
나는 이런 느낌으로 만들었습니다.
# Mac OS X
.DS_Store

## Build generated
build/
DerivedData

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

## Other
*.xccheckout
*.moved-aside
*.xcuserstate
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
.build/

# Carthage
Carthage/Build


.gitignore 편집 끝나면 커밋으로 푸시합니다.
git init
git add -A
git commit -m "first commit"
git remote add origin [email protected]:s0hno/UpdateChecker.git
git push -u origin master

출시



1, Github 라이브러리 URL에 액세스하고 릴리스 탭을 누릅니다.
2, Draft a new release 버튼을 누릅니다
3, Tag version을 입력하면 Publish release를 눌러 공개 완료입니다.

5. CocoaPods 대응



podspec 작성



먼저 CocoaPods에 해당하는 podspec 파일을 만듭니다.
나는 다음과 같은 느낌으로 만들었습니다.

UpdateChecker.podspec
Pod::Spec.new do |s|
  s.name = 'UpdateChecker'
  s.version = '1.0.0'
  s.summary = 'update check.'
  s.homepage = 'https://github.com/s0hno/UpdateChecker'
  s.social_media_url = 'https://github.com/s0hno/UpdateChecker'
  s.authors = { 'Shohei Ohno' => '[email protected]' }
  s.source = { :git => 'https://github.com/s0hno/UpdateChecker.git', :tag => s.version }
  s.ios.deployment_target = '8.0'
  s.source_files = 'Sources/*.swift'
  s.license = {
    :type => "MIT",
    :text => <<-LICENSE
      Copyright (c) 2016 Shohei Ohno
      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    LICENSE
  }
end

podspec 파일을 작성한 후 설명이 올바른지 lint를 적용합니다.
lint의 준비로서 Swift의 어떤 Version 사용하는지 .swift-version에 기술합니다. "3.0" 의 부분은 자신의 swift의 Version에
맞추십시오.
$ `echo "3.0" > .swift-version`

기본적으로 3.0을 사용하는 것 같습니다만, lint 실행시에 매회 이하와 같이 경고문이 표시되어 버리므로 3.0이라고 썼습니다.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
    `echo "2.3" > .swift-version`.

준비가 완료되었으므로 다음 명령으로 lint를 실행합니다. UpdateChecker.podspec passed validation. 가 표시되면 성공입니다.
pod spec lint UpdateChecker.podspec

CocoaPods에 등록



아래 명령으로 계정 등록과 podspec 파일이 문제없이 push가 가능하면 CocoaPods 대응 완료입니다.
pod trunk register [email protected] 'Shohei Ohno'
pod trunk push UpdateChecker.podspec

사이고에게



3개의 라이브러리 관리 툴에 대응하는 것은, 수고가 걸릴까 하기 전에는 생각하고 있었습니다만, Swift Package Manager, Carthage는 거의 대응 작업 필요없고, CocoaPods도 .podspec를 작성해 pod trunk에 푸시하는 것만으로 쉬웠습니다. 앞으로 라이브러리를 만들고 공개하는 사람의 참고가 되었으면 합니다.

이번 소스는 여기에 오르고 있습니다.

좋은 웹페이지 즐겨찾기