header-img
Info :

1. CPU Architecture

  • ์•„์ดํฐ์€ ๊ธฐ์ข…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜์˜ CPU๋ฅผ ์‚ฌ์šฉํ•จ.
  • ๋นŒ๋“œ๋ฅผ ํ•˜๋ฉด Execute file์ด ์ƒ์„ฑ๋˜๊ณ  ์ด ํŒŒ์ผ์„ CPU์—์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ๋งž๋Š” ์•„ํ‚คํ…์ฒ˜ ์ƒ์„ฑ์ด ํ•„์š”ํ•จ.
  • ๊ธฐ์ข…๋ณ„ ์•„ํ‚คํ…์ฒ˜
    • armv7 : ~ iPhone 5s
    • arm64 : iPhone 5s ~
    • x86_64 : 64bit ๊ธฐ๊ธฐ์— ๋Œ€์‘ํ•˜๋Š” simulator, mac
  • ์šฐ๋ฆฌ๋Š” iOS 13๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ 13 ๋ฒ„์ „์€ iPhone SE, 6s๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ arm64๋กœ๋งŒ ๋นŒ๋“œํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Œ.
  • Build Active Architecture Only
    • Release : Yes < arm64
    • Debug : No < simulator๋„ ์ง€์›ํ•ด์•ผ ํ•จ.

 

2. Framework

  • Static Framework
    • ๊ตฌ์„ฑ : source file + static lib + static linker
    • static linker๋ฅผ ํ†ตํ•ด static lib์˜ ์ฝ”๋“œ๊ฐ€ execute file๋กœ ๋“ค์–ด๊ฐ€ heap ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผ
    • static lib์ด ๋ณต์‚ฌ๋˜๋ฏ€๋กœ static framework๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์ค‘๋ณต ๋ฐœ์ƒ
    • ์žฅ์  : ๋Ÿฐํƒ€์ž„ ์†๋„๊ฐ€ ๋น ๋ฆ„, inline ๊ฐœ๋…
    • ๋‹จ์  : ๋ฉ”๋ชจ๋ฆฌ ๋งŽ์ด ์‚ฌ์šฉ, ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ๋™์ผํ•œ static lib์„ ์ž„ํฌํŠธํ•˜๋ฉด ๊ทธ ํšŸ์ˆ˜๋งŒํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณต์‚ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— app size ์ธก๋ฉด์—์„œ์˜ ์šฉ๋Ÿ‰ ๋Š˜์–ด๋‚˜๊ฒŒ ๋จ, ์ปดํŒŒ์ผ ์†๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆผ
  • Dynamic Framework
    • ๊ตฌ์„ฑ : source file + dynamic lib references + dynamic lib + static linker
    • ํŒŒ์ผ์ด ์•„๋‹Œ ์ฃผ์†Œ๋ฅผ execute file์— ์ €์žฅํ•˜๊ณ  static linker๋ฅผ ํ†ตํ•ด์„œ stack์œผ๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜๋Š” ํ˜•ํƒœ
    • ์ฃผ์†Œ ์ •๋ณด๋“ค๋งŒ heap์— ์ƒ์ฃผ (์Šคํƒœํ‹ฑ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผ)
    • ์žฅ์  : ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์  ์‚ฌ์šฉ
    • ๋‹จ์  : ๋Ÿฐํƒ€์ž„ ์†๋„๊ฐ€ ๋А๋ฆผ(์™œ๋ƒ ๋Ÿฐํƒ€์ž„์— ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ)

 

3. embeded ์„ค์ •

  • dynamic lib์˜ ๊ฒฝ์šฐ Targets > General > Frameworks, Libraries, and Embedded Content์˜ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด Do Not Embeded๋กœ ์„ค์ •ํ•˜๋ฉด ์•ˆ ๋จ. ์™œ๋ƒ dynamic lib๋“ค์€ ๋™์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„์— ๋กœ๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— embeded ๋œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
  • static lib์€ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋จ. ๋นŒ๋“œํ•  ๋•Œ ์ด๋ฏธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด ์ฝ”๋“œ๋“ค์ด ๋ณต์‚ฌ๋˜๋Š” ํ˜•ํƒœ์ด๋ฏ€๋กœ do not embedํ•ด๋„ ์ƒ๊ด€์ด ์—†์ง€๋งŒ! ๋ฆฌ์†Œ์Šค ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ embeded ๋ฐฉ์‹์œผ๋กœ ์„ ํƒํ•ด์•ผ ํ•จ. embeded ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ ๋ณต์‚ฌ๋ณธ์ด ๋‘ ๊ฐœ ์ƒ๊น€. ํ•˜๋‚˜๋Š” ๋นŒ๋“œ ์‹œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ ํ•œ ๋ฒˆ ๋ณต์‚ฌ๋˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง€ ๋‚ด์— ํ”„๋ ˆ์ž„์›Œํฌ ํ˜•ํƒœ๋กœ ํ•˜๋‚˜ ๋” ์กด์žฌํ•จ.
 

 

4. XCFramework ?

  • ๊ธฐ์กด์˜ fat framework (x86_64 + armv7 + arm64) ํ˜•ํƒœ๋Š” ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์— ๋ชจ๋“  ๋นŒ๋“œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰๋„ ์ปค์ง€๊ณ  ๋ถˆํ•„์š”ํ•œ ์ž‘์—…๋„ ๋“ค์–ด๊ฐ
    • ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์˜๊ฒฌ์„ ๋“œ๋ฆฌ์ž๋ฉด fat framework ์—์„œ ์šฉ๋Ÿ‰์ด ํฐ ๋ฌธ์ œ๋Š” xcframework๋„ ๋˜‘๊ฐ™์ด ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
      fat framework๋กœ ๋นŒ๋“œํ•˜๋”๋ผ๋„ ๋นŒ๋“œํƒ€์ž„์— ํ•„์š”ํ•œ ์•„ํ‚คํ…์ณ ๋ฐ”์ด๋„ˆ๋ฆฌ๋งŒ ์ถ”์ถœํ•˜์—ฌ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ ์ด๋ผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
      ๊ธฐ์กด์—๋Š” fat ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ๋„ armv7, arm64๋Š” iOS์šฉ, x86(i386), x86_64๋Š” macOS์šฉ์œผ๋กœ ๊ตฌ๋ถ„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      ๊ธฐ์กด์—๋„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด์—ˆ๊ณ , iOS์šฉ๊ณผ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์šฉ ํŒŒ์ผ์ด ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.
      (๋ณ„๋„๋กœ ์กด์žฌํ•  ๊ฒฝ์šฐ iOS ๋””๋ฐ”์ด์Šค์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” x86, x86_64๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)
      xcframework๊ฐ€ ๋‚˜์˜จ ๋ฐฐ๊ฒฝ์€ ์‹ค๋ฆฌ์ฝ˜ ๊ธฐ๋ฐ˜์˜ ๋งฅ ์ถœ์‹œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
      ์‹ค๋ฆฌ์ฝ˜ ๊ธฐ๋ฐ˜์˜ ๋งฅ์ด ์ถœ์‹œ๋˜๋ฉด์„œ arm64 ์•„ํ‚คํ…์ณ๊ฐ€ iOS์™€ ์„œ๋กœ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ fat ํŒŒ์ผ๋กœ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ฉด XCFramework๋Š” ๊ฐ๊ฐ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„๋ฆฌํ•จ.

 

5. XCFramework ๊ตฌํ˜„ํ•˜๊ธฐ

  • XCode์—์„œ create > Framework๋กœ ํ”„๋ ˆ์ž„์›Œํฌ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ ์„ค์ •
    • Targets > Build Settings > Build Options > Build Libraries for Distribution > Yes
    • Targets > Build Settings > Linking > Mach-O Type > ์›ํ•˜๋Š” ๋™์ /์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„ค์ •
    • Targest > Signing & Capabilities > Automatically manage signing ์ฒดํฌ ํ•ด์ œ, Bundle Identifier ์ง€์šฐ๊ณ  ์—”ํ„ฐ
  • ๋งŒ๋“ค ํ•จ์ˆ˜ ๋งŒ๋“  ํ›„ cmd ์ฐฝ์—์„œ ๋‚ด ํ”„๋กœ์ ํŠธ ์œ„์น˜๋กœ ์ด๋™
  • ์•„๋ž˜ ์ฝ”๋“œ ์„ธ ๊ฐœ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ๊ฐ ์‹คํ–‰ํ•ด์คŒ. ์ฒซ ๋ฒˆ์งธ๋Š” archiving์„ ํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(.xcarchive)๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ์‹ค์ œ ์•„์ดํฐ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๋งˆ์ง€๋ง‰์€ ๋‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋“ค์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ XCFramework๋กœ ๋ฌถ์€ ๊ฒƒ์ž„.
// simulator
xcodebuild archive -scheme ํ”„๋กœ์ ํŠธ๋ช… \
-archivePath './build/iphone-simulator.xcarchive' \
-sdk iphonesimulator \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES

// iphone os
xcodebuild archive -scheme ํ”„๋กœ์ ํŠธ๋ช… \
-archivePath './build/iphone.xcarchive' \
-sdk iphoneos \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES

// xcframework
xcodebuild -create-xcframework \
-framework "./build/iphone.xcarchive/Products/Library/Frameworks/ํ”„๋กœ์ ํŠธ๋ช….framework" \
-framework "./build/iphone-simulator.xcarchive/Products/Library/Frameworks/ํ”„๋กœ์ ํŠธ๋ช….framework" \
-output "./xcframework/๋งŒ๋“ค_ํ”„๋ ˆ์ž„์›Œํฌ๋ช….xcframework"
  • ๋งŒ๋“ค์–ด์ง„ "./xcframework/ํ”„๋ ˆ์ž„์›Œํฌ๋ช….xcframework" ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ์— Frameworks ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•˜์œ„์— ํ”„๋ ˆ์ž„์›Œํฌ๋ช….xcframework ํด๋”๋งŒ ๋„ฃ์–ด์คŒ.
  • xcode์—๋„ ๋„ฃ์–ด์ฃผ๊ณ  ํ…Œ์ŠคํŠธ์šฉ ํ”„๋กœ์ ํŠธ > Targets > General > Frameworks, Libraries and Embeded Content์—์„œ๋„ ์ถ”๊ฐ€ํ•ด์คŒ. Embeded & Sign์œผ๋กœ ์„ค์ •ํ•ด์คŒ. (์•„์ง dynamic framework์ด๊ธฐ ๋•Œ๋ฌธ)

 

6. static framework ๋งŒ๋“ค๊ธฐ

  • ์œ„ ์ฝ”๋“œ๋กœ ๋งŒ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ํ”„๋กœ์ ํŠธ์—์„œ Targets > Build Settings > Mach - O > static ์œผ๋กœ ๋ณ€๊ฒฝ.

 

7. ํ•œ ๊ณณ์—์„œ ์ž‘์—…ํ•˜๊ธฐ

  1. File > New > Workspace > ์ด๋ฆ„ ์ง€์ • > ์ƒ์„ฑ (ํด๋”๋Š” ํ”„๋ ˆ์ž„์›Œํฌ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ํ”„๋กœ์ ํŠธ ์žˆ๋Š” ํด๋”์—์„œ ์ƒ์„ฑ)
  2. ํ”„๋ ˆ์ž„์›Œํฌ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ๋‹ซ๊ธฐ
  3. ๋งŒ๋“  ์›Œํฌ์ŠคํŽ˜์ด์Šค ์—ด๊ณ  File > Add File to “workspace ์ด๋ฆ„” > ํ”„๋ ˆ์ž„์›Œํฌ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ํ”„๋กœ์ ํŠธ์˜ .xcodeproj ํŒŒ์ผ ์ถ”๊ฐ€
  4. ๊ทธ ๋‹ค์Œ ์™ผ์ชฝ hierarchy ์ฐฝ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ํ”„๋กœ์ ํŠธ ๋ˆ„๋ฅด๊ณ  Targets > General > Frameworks, Libraries, and Embeded Content์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ ์ถ”๊ฐ€ ํ›„ Do not Embed๋กœ ์†์„ฑ ์„ค์ •
  5. ํ•ด๋‹น ์ฐฝ์˜ ์ƒ๋‹จ์—์„œ Build Phases > Link Binary With Libraries > ํ”„๋ ˆ์ž„์›Œํฌ ์ถ”๊ฐ€
  6. framework ๋‚ด๋ถ€์— .xib ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ํ”„๋กœ์ ํŠธ์— ๋„ฃ์–ด์ฃผ๊ณ  ํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ๋‚˜์Œ. ์ฐพ์•„๋ณด๋‹ˆ ๋ฒˆ๋“ค์„ ๋งŒ๋“ค์–ด์„œ ๊ทธ๊ฑธ ๋˜ ํ”„๋กœ์ ํŠธ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋Š” ํ•œ๋ฐ ์ €๋Š” ์•ˆ ๋์Šต๋‹ˆ๋‹ค… ์ฐจ๋ผ๋ฆฌ xib ํŒŒ์ผ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์—ฐ๋™ํ•  ๋•Œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด ๋‚˜์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋ฒˆ๋“ค ๋ฐฉ์‹ : iOS static library)

 

8. code signing

framework์˜ ๊ฒฝ์šฐ signing ํ•ด ์ค„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Œ.

ํ”„๋ ˆ์ž„์›Œํฌ > Targets > Signing & Capabilities ์—์„œ Automatically manage signing ์ฒดํฌ ํ•ด์ œํ•œ ํ›„ Bundle Identifier ์ง€์šฐ๊ณ  Team์„ none์œผ๋กœ ๋ณ€๊ฒฝ

https://github.com/Carthage/Carthage/issues/1378

 

๋”๋ณด๊ธฐ
CS/iOS, Swift