1. bitbucket์ ๋ ๊ฐ์ repository๊ฐ ํ์ํจ.
- ์ค์ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ์ฝ๋ ์ ์ฅํ remote repo
- 1๋ฒ์์ ์ฌ๋ฆฐ cocoapod ํ๋ ์์ํฌ์ ์คํ์ ๊ด๋ฆฌํ remote repo
๋นํธ๋ฒํท์ ๋ ๊ฐ ๋ค private์ผ๋ก ๋ง๋ค๊ณ git ์ฃผ์ ์ ์ฅํด๋๊ธฐ.
2. Pod์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ
- cmd ์ฐฝ์์ ์ฝ์ฝ์ํ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค ํด๋๋ก ์ด๋.
pod lib create [ํ๋ ์์ํฌ๋ช ]
์ ๋ ฅ ํ ์๋ ์ฝ๋ ์ ๋ ฅ
* What platform do you want to use?
์ฌ์ฉํ ํ๋ซํผ? -> iOS ์ ํ
* What language do you want to use??
์ฌ์ฉํ ์ธ์ด? -> Swift ์ ํ
* Would you like to include a demo application with your library?
๋ฐ๋ชจ ํ๋ก์ ํธ ๋ผ์์ ๋น๋ํ ๊ฑด์ง? -> ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ํ ๋๋ง๋ค ํ
์คํธ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ yes๋ก ์ค์ .
yes๋ก ์ค์ ํด๋๊ณ ๋ฐ๋ก ์ฌ์ฉํ์ง ์์๋ ๊ด์ฐฎ์.
* Which testing frameworks will you use?
์ ๋ ํ
์คํธ์ฉ ํ๋ ์์ํฌ ์ธ๊ฑฐ๋๊ณ ๋ฌป๋๊ฒ Quick ๋๋ฅด๋ฉด ์๋ฌ๋์.. None์ผ๋ก ์ค์
* Would you like to do view based testing?
yes๋ก ์ค์ ํ๋ฉด ๋ทฐ ํ
์คํธ์ฉ ํ๋ ์์ํฌ๊ฐ ์ค์น๋จ. ๊ทธ๋ฌ๋ ๊ตณ์ด ์ ํด๋ ๋๋ ์ค์ ์ด๋ฏ๋ก No๋ก ์ค์
- ์์ ๋ฌธ๋ต๊น์ง ์๋ฃํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ ํ๋ก์ ํธ๊ฐ ๋ฐ๋ก ์ด๋ฆผ. ๋ฐ๋ก ์ด๋ฆฌ์ง ์๋๋ค๋ฉด finder์์ ํ๋ก์ ํธ๊ฐ ์์ฑ๋ ์์น๋ก ๊ฐ์ Example >
ํ๋ ์์ํฌ๋ช .xcworkspace
์คํ. - ํ ์์ ํ ์ค๋น ์๋ฃ. ์์์ ์ฐ ์ํฌ์คํ์ด์ค๋ฅผ ๋น๋ํ๋ฉด ์ค๋ฅ๊ฐ ๋ ์ ์๋๋ฐ ํ๋ ์์ํฌ๊ฐ ์๋ ๋ฐ๋ชจ ํ๋ก์ ํธ์๋ง code signing ๋ถ๋ถ์์ ์๋ช ์ ํด์ฃผ๊ฑฐ๋ target iOS version์ ํต์ผํด์ฃผ๋ฉด ํด๊ฒฐ๋จ. ๋ฒ์ ์ Targets์ ๋ํด์๋ ๋ค ํต์ผํด์ฃผ์ด์ผ ํจ.
์ฃผ์์
- framework์ info.plist๋ ๊น์ ์ฌ๋ผ๊ฐ๋๋ผ๋ ์ปจ์๋จธ ์ธก์์ ํ๋ ์์ํฌ๋ฅผ installํ ๋ ๋ฐ์๋์ง ์์. ๋ฐ๋ผ์ ๋ฐ๋ก info.plist์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ผ์ด ์๋ค๋ฉด ์ปจ์๋จธ ์ธก์ info.plist์ key-value ๊ฐ์ ๋ฃ์ด์ฃผ๋๋ก ๊ฐ์ด๋์ ์ถ๊ฐํด์ผ ํจ. ์ ๊ทผ์ ๊ฐ๋ฅํจ. (๋ค๋ฅธ ํ์ด์ง์ ๊ธฐ์ )
๋ง๋ค์ด์ง ๋ค๋ฅธ ํ์ผ
- ํ๋ก์ ํธ ํด๋ >
_Pods.xcodeproj
: ํ๋ ์์ํฌ ๋ด ์ฝ๋๋ฅผ ์์ ํ ์ ์๋ ํ๋ก์ ํธ. cocoapod podspec meta data๋ ์์ ํ ์ ์์. - ํ๋ก์ ํธ ํด๋ > Example >
ํ๋ ์์ํฌ๋ช .xcodeproj
: ๋ฐ๋ชจ ํ๋ก์ ํธ ์ฝ๋์ cocoapod podspec meta data๋ฅผ ์์ ํ ์ ์์. - ํ๋ก์ ํธ ํด๋ > Example >
ํ๋ ์์ํฌ๋ช .xcworkspace
: ํ๋ ์์ํฌ ๋ด ์ฝ๋, ๋ฐ๋ชจ ํ๋ก์ ํธ ์ฝ๋, cocoapod podspec meta data ๋ชจ๋ ์์ ๊ฐ๋ฅํ ์ํฌ์คํ์ด์ค. - ํ๋ก์ ํธ ํด๋ > ํ๋ ์์ํฌ๋ช ํด๋ > Classes ํด๋ : ํ๋ ์์ํฌ์ ํฌํจ๋์ด์ผ ํ๋ ์ฝ๋๊ฐ ์ด ํด๋ ๋ด์ ๋ค์ด์์.
3. podspec ์์ ํ๊ธฐ
์์์ ์ํฌ์คํ์ด์ค ์ด๊ณ hierarchy ์ฐฝ์์ ํ๋ ์์ํฌ๋ช > Podspec Metadata > ํ๋ ์์ํฌ๋ช .podspec ์ ํ
์ฃผ์์ ๋ค ์ ์ธํ๋ฉด ํ ์คํ ํ์ผ์ด ์๋์ ๊ฐ์ ๊ฒ์. podspec ์ธ์ด๋ Ruby๋ก ์์ฑ๋์ด ์์ผ๋ฉฐ ์ ๊ฒฝ์จ์ค์ผ ํ ๋ถ๋ถ์ ์๋์ ๊ฐ์.
s.name
: ํ๋ ์์ํฌ ์ด๋ฆs.version
: ํ๋ ์์ํฌ์ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ถ๋ถ. ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ ๋๋ง๋ค ๊ผญ ์ด ๋ถ๋ถ์ ์์ ํด์ฃผ๊ณ ๋น๋ํด์ฃผ์ด์ผ ํจ.s.summary
: ์์ฝs.description
: ์ค๋ชs.source
: s.source์ :git => '์ฃผ์'์ 1๋ฒ์์ ๋ง๋ค์๋ ์ค์ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ์ฝ๋ ์ ์ฅํ remote repo์ ์ฃผ์๋ฅผ ๋ฃ์ด์ค.s.ios.deployment_target
: ์ด ํ๋ ์์ํฌ์ ํ๊ฒ iOS ๋ฒ์ ์ ์์ฑ- ๋๋จธ์ง ์์๋ ๊ตณ์ด ๋น์ฅ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ ๋ฏ. ๊ทธ๋ฆฌ๊ณ
s.private
์ true๋ก ์ค์ ํ๋ฉด ๋ด๋ถ ์ฝ๋๊ฐ closed source๊ฐ ๋๋ค๊ณ ํด์ ์์ ํด๋ดค๋๋ฐs.private
์ ์ธ ์ ์๋ ํค์๋์...
Pod::Spec.new do |s|
s.name = 'ํ๋ ์์ํฌ๋ช
'
s.version = '๋ฒ์ ์ ๋ณด'
s.summary = 'A short description of ํ๋ ์์ํฌ๋ช
.'
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/์ฌ์ฉ์'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '์ฌ์ฉ์๋ช
' => '์ฌ์ฉ์ ์ด๋ฉ์ผ ์ฃผ์' }
s.source = { :git => 'ํ๋ ์์ํฌ ์ค์ ์ฝ๋๊ฐ ์๋ ๊น ์ฃผ์', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '10.0'
# incorrect usage!!!
# s.private = true
s.source_files = 'ํ๋ ์์ํฌ๋ช
/Classes/**/*'
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3'
end
4. ํ๋ ์์ํฌ ์ฝ๋ ์์
2๋ฒ์์ ์ฐ ์ํฌ์คํ์ด์ค์์ hierarchy ์ฐฝ์์ Pods > Development Pods > ReplaceMe.swift ํ์ผ์ ํ์ผ๋ช ์ ์์ ํ๊ณ ์ฝ๋๋ฅผ ์์ ํด์ ํ๋ ์์ํฌ ์ฝ๋๋ฅผ ๋ฃ๊ฑฐ๋ ReplaceMe.swift ํ์ผ ์ฐํด๋ฆญ > New File > Swift File > ์์น๋ฅผ ํ๋ ์์ํฌ๋ช , Classes ํด๋๊น์ง ์ด๋ํ ํ Create์ ๋๋ฌ์ฃผ์ด์ผ ํจ.
ํ๋ ์์ํฌ์์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์์ ํ๋ค๋ฉด ํ ์คํธ๋ฅผ ํ๋ ๋ถ๋ถ์ hierarchy ์ฐฝ์์ ํ๋ ์์ํฌ๋ช ์ ํ > Example for ํ๋ ์์ํฌ๋ช ํด๋ > ViewController.swift ํ์ผ์์ ์์ ํด์ฃผ๊ณ ๋น๋ํด์ฃผ๋ฉด ๋จ.
5. ํ๋ ์์ํฌ ๊น์ ์ฌ๋ฆฌ๊ธฐ
- cmd ์ฐฝ์์ pod lib create ํ๋ ํด๋ ์์น๋ก ์ด๋ (ํ๋ ์์ํฌ ํ๋ก์ ํธ ์๋ ์์น๋ก ์ด๋)
- git status : ๋ณ๊ฒฝ์ฌํญ ํ์ธ
- git add . : ๋ชจ๋ ํ์ผ ๊น ํธ๋ํน์ ์ถ๊ฐ
- git commit -m “์ปค๋ฐ ๋ฉ์ธ์ง” : ์์์ ์ถ๊ฐํ ํ์ผ๋ค ์ปค๋ฐ
- git tag ๋ฒ์ ๋ช : ์์ ์ปค๋ฐํ ๊ฒ๊น์ง ํ๊ทธ ์ค์ ํ๋ค๋ ์๋ฏธ. ๋ฒ์ ์ปจํธ๋กค ์ฉ๋ ex) git tag 0.1.0
- git remote add origin git์ฃผ์ : ์ฌ๊ธฐ์ git์ฃผ์๋ 1๋ฒ์์ ๋ง๋ค์๋ ์ค์ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ์ฝ๋ ์ ์ฅํ remote repo์ ์ฃผ์๋ฅผ ๋ฃ์ด์ค.
- git push origin master ๋ฒ์ ๋ช : ํ์ฌ master ๋ธ๋์น๋ push, ๋ฒ์ ํ๊ทธ๋ pushํ๋ค๋ ์๋ฏธ.
6. Pod Spec Repo ๋ง๋ค๊ธฐ
- cmd ์ฐฝ ์ด๊ธฐ
pod repo add [REPO_NAME] [๊น ์ฃผ์]
: REPO_NAME์ Spec repo๋ก ์ฌ์ฉํ ์ด๋ฆ ์๋ฌด๊ฑฐ๋ ์ง์ด์ฃผ๋ฉด ๋๊ณ ๊น ์ฃผ์๋ 1๋ฒ์์ ๋ง๋ค์๋ cocoapod ํ๋ ์์ํฌ์ ์คํ์ ๊ด๋ฆฌํ remote repo์ ์ฃผ์๋ฅผ ๋ฃ์ด์ค.cd ~/.cocoapods/repos
cd [REPO_NAME]
: 2๋ฒ์์ ๋ง๋ ํด๋๋ก ์ด๋pod repo push [REPO_NAME] [.podspec ํ์ผ์ ๊ฒฝ๋ก]
: REPO_NAME์ 2๋ฒ์์ ๋ฃ์ด์ค ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋จ. .podspec ํ์ผ์ ๊ฒฝ๋ก๋ pod lib create๋ก ๋ง๋ ํด๋๋ก ์ด๋ํ ํ ํ๋ ์์ํฌ๋ช .podspec ํ์ผ ์ฐํด๋ฆญ ํ option ๋๋ฅด๊ณ ๊ฒฝ๋ก ์ด๋ฆ์ ๋ณต์ฌ ํด๋ฆญ. ๊ทธ ํ cmd ์ฐฝ์์ ๋ถ์ฌ์ฃผ๋ฉด ๋จ. ์ด ๋ช ๋ น์ด๊ฐ master branch๋ฅผ ๊ฐ์งํด์ spec์ .podspec ํ์ผ์ s.version์ ๋ง์ถฐ์ spec์ ์๋์ผ๋ก ์ ์ฅํด์ค ๊ฒ์.- ๋ง์ฝ ํ์ฌ ๋ธ๋์น ์ด๋ฆ์ด master๊ฐ ์๋๋ผ๋ฉด ๋ธ๋์น๋ช
๋ณ๊ฒฝ์ด ํ์ํจ.
git branch -m ์ด์ _๋ธ๋์น_name master
๋ก ๋ธ๋์น ์ด๋ฆ ๋ณ๊ฒฝ. - ๋ง์ฝ remote project๊ฐ ๋น์ด์์ด์ ๋ธ๋์น ๊ด๋ จ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋น ์ปค๋ฐ์ ์ผ๋จ pushํ๊ณ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ๋จ.
git commit --allow-empty -m "๋ฉ์ธ์ง"
๋ก empty ์ปค๋ฐ์ ํด์ฃผ๊ณgit push origin
์คํ.
- ๋ง์ฝ ํ์ฌ ๋ธ๋์น ์ด๋ฆ์ด master๊ฐ ์๋๋ผ๋ฉด ๋ธ๋์น๋ช
๋ณ๊ฒฝ์ด ํ์ํจ.
7. ํ๋ ์์ํฌ ์ฌ์ฉ
- ํ๋ก์ ํธ cmd ์ฐฝ์์ open
pod init
- 2๋ฒ์ผ๋ก ์์ฑ๋ podfile์
pod "ํ๋ ์์ํฌ_NAME", :git => "git_์ฃผ์", :tag => '๋ฒ์ (ex: 0.0.0)'
์ถ๊ฐ. git ์ฃผ์๋ spec ์ฃผ์๊ฐ ์๋ ์ค์ ํ๋ ์์ํฌ๋ก ์ฌ์ฉํ ์ฝ๋ ์ ์ฅํ remote repo์ ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด ๋จ. pod install
8. ํ๋ ์์ํฌ ์ ๋ฐ์ดํธ
- ํ๋ ์์ํฌ ์ํฌ์คํ์ด์ค์์ ์ฝ๋ ์์
- ํ๋ ์์ํฌ ํ๋ก์ ํธ์ ๋ณ๊ฒฝ ์ฌํญ์ git์ ๋ฐ์ํด์ฃผ์ด์ผ ํจ.
- ํ๋ ์์ํฌ ํ๋ก์ ํธ๊ฐ ์๋ ๊ณณ์์ cmd open
git add .
git commit -m "update: version 0.0.0"
git tag 0.0.0
git push origin master 0.0.0
- cocoapod spec์ด ์๋ ํด๋๋ก ์ด๋ ํ cmd ์ด๊ณ
pod repo push [REPO_NAME] [.podspec ํ์ผ์ ๊ฒฝ๋ก]
- ์ด ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ก ๊ฐ์ tag ๋ณ๊ฒฝ ํ
pod update
์ํ
9. ํ๋ ์์ํฌ ํ์ผ ๋ฐ๋ก ๋นผ๊ธฐ
- ๋ฐ๋ชจ ํ๋ก์ ํธ๋ฅผ ํฌํจํด์ ๋ง๋ค๊ณ ๋น๋ํด๋ณธ ๊ฒฝ์ฐ
- ๋ฐ๋ชจ ํ๋ก์ ํธ์ hierarchy ์ฐฝ์์ Pods > Products > ํ๋ ์์ํฌ ์ฐํด๋ฆญ > show in finder ์ ํ > ํ๋ ์์ํฌ ํด๋ ์ถ์ถ
- ์๋ ๊ฒฝ์ฐ
- 7๋ฒ์ ํตํด ํ๋ ์์ํฌ ์ฌ์ฉํ๊ณ hierarchy ์ฐฝ์์ Pods > Products > ํ๋ ์์ํฌ ์ฐํด๋ฆญ > show in finder ์ ํ > ํ๋ ์์ํฌ ํด๋ ์ถ์ถ
10. ํ๋ ์์ํฌ ๋ฐฐํฌ ์ ํ์ง
cocoapod ์์ฒด๊ฐ open source ๋ฐฐํฌ ํด์. ๋ฐ๋ผ์ ๋ด๋ถ ์์ค์ฝ๋๋ฅผ ๋น๊ณต๊ฐํ๋ฉด์ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ์๋ ์์. ๋ด๋ถ ์์ค์ฝ๋๋ฅผ ๊ณต๊ฐํ๋ฉด์ ์ฝ๋๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ์์๋ ๋ ๊ฐ์ง๊ฐ ์์.
- ์ผ๋ฐ์ ์ผ๋ก cocoaPod์ ์ฌ์ฉํ๋ ๋ฐฉ์์ธ ๋ด๋ถ ์ฝ๋์์ค๋ฅผ public remote repository์ ์ฌ๋ฆฌ๊ณ trunk๋ก spec(๋ฒ์ ๊ด๋ฆฌ)์ ๋ฐฐํฌํ๋ ๊ฒ
- ๋ด๋ถ ์์ค ์ฝ๋๋ฅผ private remote repository์ ์ฌ๋ฆฌ๊ณ spec ๋ฐฐํฌ๋ private remote repository์ ์ฌ๋ฆฌ๋ ๊ฒ.
- ๋ด๋ถ ์์ค ์ฝ๋๋ ๋น๊ณต๊ฐ์ง๋ง ์ฝ๋๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์๋ ํ๋ ์์ํฌ ์์ฒด๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ์
์ฒซ ๋ฒ์งธ ๋ฐฉ์์ ์ด ์์ค ์์ฒด์ ๊ถํ์ด ์๋ ์ฌ๋์ด๋ , ์๋ ์ฌ๋์ด๋ ๋ชจ๋ ์ ๊ทผํ ์ ์์ง๋ง ๋ ๋ฒ์งธ ๋ฐฉ์์ ๋ฐฐํฌ์ ์ชฝ์์ ์ ์ ํ ์ฌ๋์๊ฒ๋ง ์ด pod lib์ ๋ค์ด๋ฐ์ ์ ์๊ฒ ํ์ฌ ๋ด๋ถ ์์ค ์ฝ๋ ์์ฒด๋ ๊ณต๊ฐ์ง๋ง ๋ชจ๋ ์ฌ๋์๊ฒ public ํ์ง๋ ์์. ๋ง์ง๋ง ๋ฐฉ๋ฒ์ ์ปจ์๋จธ๊ฐ pod์ ํตํด ๋ฐ๋ ๋์์ด (์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ) ํ๋ ์์ํฌ์ ์์ค ์ฝ๋๊ฐ ์๋๊ณ ํ๋ ์์ํฌ ๊ทธ ์์ฒด์. ๊ฒฐ๊ณผ๋ฌผ์ ์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ฐจ์ด๋ฅผ ํ์ธํ ์ ์์.
ํ๋ ์์ํฌ์ ์์ค ์ฝ๋๋ฅผ ๊ณต์ | ํ๋ ์์ํฌ ์์ฒด๋ฅผ ๊ณต์ |
![]() |
![]() |
ํค๋์ .c ํ์ผ์ ๋ณด๋ฉด ๋ด๋ถ ์ฝ๋๊ฐ ๋ค ๊ณต๊ฐ๋์ด ์์. | ํ๋ ์์ํฌ ์์ฒด๋ก ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ์ธํ ์ ์์. |
11. ์ฐธ๊ณ
'CS > iOS, Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] XCFramework build script (0) | 2023.04.06 |
---|---|
[iOS] XCFramework private repository์ cocoapod์ผ๋ก ๋ฐฐํฌํ๊ธฐ (0) | 2023.04.06 |
[iOS] framework ๊ธฐ๋ณธ (0) | 2023.02.14 |
[iOS] xcode, bitbucket ์ฐ๋ (0) | 2023.02.14 |
[iOS] IDFA ๊ฐ ๋ฐ์์ค๊ธฐ (0) | 2023.02.14 |