Swiftにおけるインポートとリンクの仕組みを探る iOSDC 2019
Swiftʹ͓͚ΔΠϯϙʔτͱϦϯΫͷΈΛ୳Δ
View Slide
ࠓ͢͜ͱ• SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜ• ֤ܗࣜͷҧ͍ͱಛ• ΠϯϙʔτͱԿ͔• ϥΠϒϥϦΛImport͢ΔͨΊʹඞཁͳ͜ͱ• ϦϯΫͱԿ͔• ϥΠϒϥϦΛϦϯΫ͢ΔͨΊʹඞཁͳ͜ͱ
ϚχϡΞϧͰઃఆXcodeͷػೳΛར༻͢ΔCocoaPods, CarthageΛར༻͢ΔϥΠϒϥϦͷར༻ํ๏
ϚχϡΞϧͰઃఆXcodeΛར༻͢ΔCocoaPods, CarthageΛར༻͢ΔղܾͷқHardEasy
ͳͥΠϯϙʔτͱϦϯΫʹ͍ͭͯΔඞཁ͕͋Δͷ͔• ιϑτΣΞ։ൃͰ֎෦ͷϥΠϒϥϦΛར༻͢ΔͨΊ• ϥΠϒϥϦΛར༻͠ͳ͍͜ͱͳ͍ʢe.g. UIKitʣ• ϥΠϒϥϦͷར༻ऀͱͯ͠ɺར༻ʹ·ͭΘΔτϥϒϧΛղܾͰ͖Δ• ϥΠϒϥϦͷ࡞ऀͱͯ͠ɺͷํ๏Λٕज़తʹஅͰ͖Δ• ϦϯΫͷઃఆར༻ऀ͕ΔͷͳͷͰར༻ऀͷεΩϧͷ্ɺ࡞ऀɾར༻ऀͱʹϋοϐʔʹͳΔɻ
ͳͥΠϯϙʔτͱϦϯΫ͕͍͠ͷ͔• ϥΠϒϥϦݟͨͰஅͰ͖ͳ͍ҧ͍͕େ͖͍• SwiftͰIDEίϯύΠϥʢυϥΠόʔʣʹΑΔ҉తͳॲཧ͕ଟ͍• ΠϯϙʔτͱϦϯΫಉ࣌ʹղܾ͞ΕΔΑ͏ʹΈ͑Δ͕ɺ࣮ࡍʹ̎ͭʢҎ্ʣͷҟͳΔϑΣʔζͱϓϩηε• Τϥʔ͕ىͬͨ͜ͱ͖ɺදͷΤϥʔϝοηʔδ͔ΒݪҼ͕ಡΈऔΕͳ͍• ಉ͡ΤϥʔϝοηʔδͰݪҼ͞·͟·
ͳͥΠϯϙʔτͱϦϯΫ͕͍͠ͷ͔• ൚༻తͳࣝͱXcodeSwiftݻ༗ͷࣝͷ྆ํ͕ඞཁ• ݕࡧ͢ΔͱࣅͨΤϥʔϝοηʔδͷؔͳ͍͕ͲΜͲΜग़ͯ͘Δ• JavaRubyɺJavaScriptͳͲVMͰಈ͘ͷͰωΠςΟϒίʔυͱͷϦϯΫΛΑΓચ࿅͞ΕͨΈ͕͋Γɺ͕ͦ͜τϥϒϧʹͳΔ͜ͱগͳ͍
࣮Τϥʔͷύλʔϯগͳ͍
ࠓͷͰಘΒΕΔ͜ͱ• ϥΠϒϥϦͷܗࣜʹؔ͢Δࣝ• ΠϯϙʔτͱϦϯΫͷࣝ• ΠϯϙʔτͱϦϯΫʹ·ͭΘΔτϥϒϧղܾͷೳྗجૅԠ༻• ϥΠϒϥϦ࡞ʹ͓͚Δܗଶͷٕज़அ• ύοέʔδϚωʔδϟͷߴͳར༻
ϥΠϒϥϦʹ͍ͭͯ
ϥΠϒϥϦͷܗ֤ࣜܗࣜͷҧ͍ͱಛ
ϥΠϒϥϦͷܗࣜͱҧ͍ϥΠϒϥϦͷܗࣜͱҧ͍ΠϯϙʔτͱϦϯΫʢXcodeΛ༻ͯ͠ઃఆʣΠϯϙʔτͱϦϯΫʢϚχϡΞϧ࡞ۀͰઃఆʣϞδϡʔϧͱϦϯΫͱ
SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜϑϨʔϜϫʔΫ(e.g. UIKit.framework, RxSwift.framework)μΠφϛοΫɾϥΠϒϥϦ(e.g. libsqlite3.dylib, libz.dylib)ελςΟοΫɾϥΠϒϥϦ(e.g. libssl.a, libcrypto.a)
SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜμΠφϛοΫɾϑϨʔϜϫʔΫμΠφϛοΫɾϥΠϒϥϦελςΟοΫɾϥΠϒϥϦελςΟοΫɾϑϨʔϜϫʔΫ
SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜϞδϡʔϧΛؚΉμΠφϛοΫɾϑϨʔϜϫʔΫμΠφϛοΫɾϥΠϒϥϦελςΟοΫɾϥΠϒϥϦϞδϡʔϧΛؚ·ͳ͍μΠφϛοΫɾϑϨʔϜϫʔΫϞδϡʔϧΛؚΉελςΟοΫɾϑϨʔϜϫʔΫϞδϡʔϧΛؚ·ͳ͍ελςΟοΫɾϑϨʔϜϫʔΫ
SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜ✖
SwiftͰओʹ༻Ͱ͖ΔϥΠϒϥϦͷܗࣜ✖ ✖
ݟͨͰΘ͔Γʹ͍͘ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠✖ ✖ ✖ ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖
ݟͨͰΘ͔ʹ͍͘ͳ͍ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠✖ ✖ ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖✖
ݟͨͰΘ͔ʹ͍͘ͳ͍ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠✖ ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖✖✖
ݟͨͰΘ͔ʹ͍͘ͳ͍ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖✖ ✖✖
ݟͨͰΘ͔ʹ͍͘ͳ͍ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖ ✖ ✖✖
ݟͨͰΘ͔ʹ͍͘ͳ͍ҧ͍ͷΈ߹ΘͤϑϨʔϜϫʔΫϥΠϒϥϦμΠφϛοΫελςΟοΫSwiftObjective-CCϞδϡʔϧ༗ΓϞδϡʔϧແ͠ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ✖ ✖ ✖ ✖
ϑϨʔϜϫʔΫͱϥΠϒϥϦͷҧ͍
ϑϨʔϜϫʔΫͱϥΠϒϥϦͷҧ͍όϯυϧΛ࣋ͭόϯυϧΛ࣋ͨͳ͍όϯυϧΛ࣋ͨͳ͍
όϯυϧͱʁAppόϯυϧ Projectόϯυϧ Settingsόϯυϧ Frameworkόϯυϧ
όϯυϧͱʁ
ελςΟοΫϦϯΫμΠφϛοΫϦϯΫ
ελςΟοΫϦϯΫμΠφϛοΫϦϯΫStatic Library (*.a)Static Framework (*.framework)Dynamic Framework (*.framework)Dynamic Library (*.dylib)
ελςΟοΫϦϯΫίϯύΠϧ Static Linking
μΠφϛοΫϦϯΫίϯύΠϧ Dynamic Linking
ελςΟοΫϦϯΫμΠφϛοΫϦϯΫʓʓ.app ××.app
ελςΟοΫϥΠϒϥϦ͔μΠφϛοΫϥΠϒϥϦ͔ΛௐΔ$ fileUsage: file [-bcCdEhikLlNnprsvzZ0] [--apple] [--extension] [--mime-encoding][--mime-type] [-e ] [-F ] [-f ][-m ] [-P ] ...file -C [-m ]file [--help]file ίϚϯυ
ελςΟοΫϥΠϒϥϦ͔μΠφϛοΫϥΠϒϥϦ͔ΛௐΔ$ file Logger.framework/LoggerLogger.framework/Logger: Mach-O universal binary with 2 architectures:[x86_64:Mach-O 64-bit x86_64 dynamically linked shared library,...[arm64:Mach-O 64-bit arm64 dynamically linked shared library,...
όϯυϧ༗Γ όϯυϧແ͠ελςΟοΫϦϯΫμΠφϛοΫϦϯΫStatic LibraryStatic FrameworkDynamic LibraryDynamic Framework
ΠϯϙʔτͱϦϯΫ
ΠϯϙʔτͱϦϯΫϥΠϒϥϦͷܗࣜͱҧ͍ΠϯϙʔτͱϦϯΫʢXcodeΛ༻ͯ͠ઃఆʣΠϯϙʔτͱϦϯΫʢϚχϡΞϧ࡞ۀͰઃఆʣϞδϡʔϧͱϦϯΫͱ
Πϯϙʔτ• ֎෦ϥΠϒϥϦʢ͕ࣗॻ͍ͨίʔυҎ֎ʣΛࣗͷίʔυϕʔεͰར༻Մೳʹ͢Δߏจɾݴޠػೳ• ϥΠϒϥϦ͕ެ։͍ͯ͠ΔγϯϘϧʢΫϥεɾؔͳͲʣΛࣗͷίʔυͰࢀরͰ͖ΔΑ͏ʹ͢Δ• ֤ϑΝΠϧʢίϯύΠϧ୯ҐʣΛίϯύΠϧ͢Δ࣌Ͱղܾ͞ΕΔ
ϦϯΫ• ιʔείʔυΛίϯύΠϧͯ͠ੜ͞ΕͨΦϒδΣΫτϑΝΠϧɺ͓Αͼ֎෦ϥΠϒϥϦΛͯ͢࿈݁ʢϦϯΫʣͯ̍ͭ͠ͷ࣮ߦܗࣜϑΝΠϧɺ͋Δ͍ϥΠϒϥϦΛੜ͢Δ• ϦϯΧ͕ߦ͏• ͯ͢ͷιʔείʔυΛίϯύΠϧͨ͠ޙʹߦΘΕΔ• ͯ͢ͷγϯϘϧ͕ղܾ͞ΕΔ
࣮ࡍʹ֬ೝͯ͠ΈΑ͏
ϥΠϒϥϦΛར༻͢ΔҰൠతʢ҉తʣͳํ๏
XcodeΛͬͯ֎෦ϥΠϒϥϦΛར༻Մೳʹ͢Δ
Xcode҉తʹԿΛ͍ͯ͠Δͷ͔
Updated on Xcode 11
Xcode͕ઃఆ͢Δͷ• FRAMEWORK_SEARCH_PATHSʹϑϨʔϜϫʔΫ͕͋ΔσΟϨΫτϦͷσΟϨΫτϦΛՃ• Linked Framework and LibrariesʹϑϨʔϜϫʔΫΛՃ• Build PhaseʹCopy Files PhaseΛՃͯ͠ϑϨʔϜϫʔΫΛΞϓϦέʔγϣϯόϯυϧͷFrameworksσΟϨΫτϦʹίϐʔ͢Δ
FRAMEWORK_SEARCH_PATHSΛௐΔ
ফͯ͠ΈΔ
ΠϯϙʔτͰΤϥʔ
Copy Files PhaseΛௐΔ
Automatic Linking
Automatic LinkingΛແޮʹ͢Δ
-disable-autolink-framework
Import == LinkAutomatic Linking
ϑϨʔϜϫʔΫ͔ΒϑΝΠϧΛফͯ͠ΈΔ
Ϟδϡʔϧ
ϞδϡʔϧͱϥΠϒϥϦͷܗࣜͱҧ͍ΠϯϙʔτͱϦϯΫʢXcodeΛ༻ͯ͠ઃఆʣΠϯϙʔτͱϦϯΫʢϚχϡΞϧ࡞ۀͰઃఆʣϞδϡʔϧͱϦϯΫͱ
BUILD_LIBRARY_FOR_DISTRIBUTION = YES
ϞδϡʔϧʢSwiftҎ֎ʣ
ಠࣗϞδϡʔϧΛఆٛ͢Δ
Module MapϑΝΠϧͷྫ
Bridging Headerͱͷҧ͍• Module MapBridging Headerͷ্Ґޓ• Bridging HeaderΞϓϦέʔγϣϯλʔήοτͰ͔͑͠ͳ͍ʢϑϨʔϜϫʔΫͷ։ൃͰ͑ͳ͍ʣ• Bridging Headerάϩʔόϧʹ࡞༻͢ΔͷͰඞཁͳͱ͜ͱ͚ͩͰImport͢Δͱ͍͏͜ͱ͕Ͱ͖ͳ͍• ϓϩδΣΫτʹObjective-CͷϑΝΠϧ͕ࠞ͟Δ߹ʹ͚ͩ͏ͷ͕Α͍ʢͦͷ߹ͰModule Map͑Δʣ
Ϟδϡʔϧͷׂ• Swift͕ϥΠϒϥϦΛΠϯϙʔτ͢ΔʹϞδϡʔϧ͕ඞཁʢʹΠϯϙʔτϞδϡʔϧ͚ͩ͋Εྑ͍ʣ• PublicͳAPIͷએݴ• Objective-C/CͷϥΠϒϥϦΛΠϯϙʔτ͢ΔʹɺϔομϑΝΠϧ (.h) ΛModulemapͰϞδϡʔϧʹม͢Δ• SwiftͷϥΠϒϥϦͰϞδϡʔϧίϯύΠϥ͕ࣗಈతʹੜ͢Δ
Module Stability
https://forums.swift.org/t/plan-for-module-stability/14551Module Stability
ϞδϡʔϧΛΠϯϙʔτ͢Δʹimport LoggerLoggerLogger
ϞδϡʔϧΛΠϯϙʔτ͢ΔʹFRAMEWORK_SEARCH_PATHSModulesimport LoggerLoggerLogger
ϞδϡʔϧΛΠϯϙʔτ͢Δʹimport MarketoMarketoMarketo
ϞδϡʔϧΛΠϯϙʔτ͢ΔʹSWIFT_INCLUDE_PATHSmodule.modulemapimport MarketoMarketoMarketo
ϦϯΫ
ϦϯΫͱϥΠϒϥϦͷܗࣜͱҧ͍ΠϯϙʔτͱϦϯΫʢXcodeΛ༻ͯ͠ઃఆʣΠϯϙʔτͱϦϯΫʢϚχϡΞϧ࡞ۀͰઃఆʣϞδϡʔϧͱϦϯΫͱ
ϦϯΫͱ• ίϯύΠϧͰੜ͞ΕͨΦϒδΣΫτϑΝΠϧͱϥΠϒϥϦʢΦϒδΣΫτϑΝΠϧͷू߹ʣΛ̍ͭʹ࿈݁ʢϦϯΫʣ͢Δ• ίϯύΠϧͰੜ͞ΕͨΦϒδΣΫτϑΝΠϧͷϦϯΫࣦഊ͠ͳ͍ͷͰɺΤϥʔ͕ى͜Δͱͨ͠Β֎෦ϥΠϒϥϦͱͷϦϯΫ
ϦϯΫͱίϯύΠϧ Static LinkingίϯύΠϧ Dynamic Linking
ϥΠϒϥϦΛϦϯΫ͢ΔʹʢXcodeʣ
ϑϨʔϜϫʔΫΛϦϯΫ͢Δʹ• FRAMEWORK_SEARCH_PATHSʹϑϨʔϜϫʔΫ͕͋ΔσΟϨΫτϦͷσΟϨΫτϦΛࢦఆ͢Δ• OTHER_LDFLAGSʹ-framework ͱࢦఆ͢Δ ʢe.g. -framework RxSwift, -framework "Alamofire"ʣ
ϑϨʔϜϫʔΫΛϦϯΫ͢Δʹ
ϥΠϒϥϦΛϦϯΫ͢Δʹ• ϥΠϒϥϦͷ͋ΔσΟϨΫτϦͷσΟϨΫτϦΛLIBRARY_SEARCH_PATHSʹࢦఆ͢Δ• OTHER_LDFLAGSʹ-lͱࢦఆ͢Δ ʢe.g. -lsqlite3, -l"crypto"ʣ• ϥΠϒϥϦ໊ͷϧʔϧ ʢlibsqlite3.dylib => sqlite3ɹlibssl.a => sslʣ
ϥΠϒϥϦΛϦϯΫ͢Δʹ
ϥΠϒϥϦΛϦϯΫ͢Δʹlibssl.aFRAMEWORK_SEARCH_PATHSLIBRARY_SEARCH_PATHSOTHER_LDFLAGS = -framework "RxSwift" -l"ssl"RxSwift
ΞʔΩςΫνϟɾϓϥοτϑΥʔϜ͕Ұக͠ͳ͚ΕͳΒͳ͍iOS Simulatorx86_64iOS Devicearm7viOS Devicearm64.appiOS Devicearm64❌❌✅
αʔνύεΛมԽ͢Δ
CONFIGURATION_BUILD_DIRαʔνύεΛมԽ͢ΔCONFIGURATION_BUILD_DIRBUILD_DIR CONFIGURATION EFFECTIVE_PLATFORM_NAME.../Build/Products Debug -iphoneosFRAMEWORK_SEARCH_PATHS = "$(CONFIGURATION_BUILD_DIR)/Firebase"e.g.
Universal (Fat) Binaryhttps://darkdonno.wordpress.com/2010/11/06/a-look-at-mach-o/
Universal Binary (lipo)$ xcrun lipo -create -output
Universal Binary (lipo)$ xcrun lipo -info
Universal Binary (Carthage)
XCFramework
μΠφϛοΫϑϨʔϜϫʔΫͷ߹
μΠφϛοΫϑϨʔϜϫʔΫͷ߹@executable_path/FrameworksOTHER_LDFLAGS = -framework "RxSwift"@loader_path@rpath
ղܾYES/NOνϟʔτϥΠϒϥϦͷܗࣜͱҧ͍ΠϯϙʔτͱϦϯΫʢXcodeΛ༻ͯ͠ઃఆʣΠϯϙʔτͱϦϯΫʢϚχϡΞϧ࡞ۀͰઃఆʣϞδϡʔϧͱϦϯΫͱ
ղܾYES/NOνϟʔτYESʢϦϯΫͷΤϥʔʣQ1ϦϯΫΤϥʔͰ͔͢ʁNOʢΠϯϙʔτͷΤϥʔʣ
ղܾYES/NOνϟʔτYESʢ*.frameworkʣQ2Πϯϙʔτ͠Α͏ͱ͍ͯ͠ΔͷϑϨʔϜϫʔΫͰ͔͢ʁNOʢ*.aʣ
ղܾYES/NOνϟʔτYESQ3ϑϨʔϜϫʔΫʹϞδϡʔϧؚ·Ε͍ͯ·͔͢ʁNO
ղܾYES/NOνϟʔτAαʔνύε͕ਖ਼͍͔֬͠ೝ͍ͯͩ͘͠͞
యܕతͳΤϥʔ
యܕతͳΠϯϙʔτΤϥʔ• αʔνύε͕ؒҧ͍ͬͯΔ• Ϟδϡʔϧ͕ͳ͍• Module Mapʹॻ͔Ε͍ͯΔϔομ͕ࢀরͰ͖ͳ͍• Swift 5.0·Ͱόʔδϣϯͷҧ͏ίϯύΠϥͰϏϧυͨ͠ϞδϡʔϧΛΠϯϙʔτͰ͖ͳ͍• ModuleMapͷ໊લ͕ϧʔϧ͔Β֎Ε͍ͯΔ -Xcc -fmodule-map-file="....modulemap"
యܕతͳϦϯΫΤϥʔ• αʔνύε͕ؒҧ͍ͬͯΔ• ରͷΞʔΩςΫνϟɾϑϨʔϜϫʔΫͷόΠφϦ͕Ϗϧυ͞Εͯͳ͍• dyld: image not found• μΠφϛοΫϑϨʔϜϫʔΫ͕ίϐʔ͞Εͯͳ͍• େจࣈখจࣈͷҧ͍• Swift 4.2·Ͱόʔδϣϯͷҧ͏ίϯύΠϥͰϏϧυͨ͠όΠφϦΛϦϯΫͰ͖ͳ͍
ΞʔΩςΫνϟ͕ݟ͔ͭΒͳ͍• xcrun lipo -info ... • CocoaPodsΛ͍ͬͯΔͳΒͯ͢ͷΞʔΩςΫνϟ͕Ϗϧυ͞Ε͍ͯΔ͔• Ϗϧυߏͷ
Ԡ༻ฤ
CϥΠϒϥϦʹґଘʢϦϯΫʣ͢ΔϑϨʔϜϫʔΫΛ࡞͢Δ1. ར༻ऀ͕ࣗͰCϥΠϒϥϦͷϦϯΫΛઃఆ͢Δ2. ར༻ऀ͔ΒCϥΠϒϥϦͷଘࡏӅ͍ͨ͠
CocoaPodsΛϫʔΫεϖʔεʹ౷߹ͤͣʹ༻͢Δ• CocoaPods͕αʔνύεϦϯΧϑϥάࣗಈઃఆ͢ΔػೳΛΘͣʹɺࣗͰ֤ϥΠϒϥϦΛϏϧυ͠ϦϯΫͷઃఆΛ͢Δɻ ϫʔΫεϖʔεʹCocoaPodsͷઃఆ͕ࠞ͟Βͣʹॊೈ͔ͭγϯϓϧʹར༻Ͱ͖Δ͜ͱ͕ϝϦοτɻ
CarthageͰϏϧυͤͣʹϓϩδΣΫτࢀরͰཧ͢Δ• CarhageϢχόʔαϧόΠφϦΛࣗಈతʹϏϧυͯ͘͠ΕΔ͕ɺσόοά͠ʹ͍͘ͳͲσϝϦοτ͋ΔͷͰɺϏϧυͤͣʹϓϩδΣΫτͷνΣοΫΞτ͚ͩͯ͠ར༻͢Δɻ
ෳͷμΠφϛοΫϑϨʔϜϫʔΫΛ̍ͭͷϑϨʔϜϫʔΫʹ౷߹͢Δ• μΠφϛοΫϑϨʔϜϫʔΫ͕૿͑ͯ͘Δͱىಈ࣌ؒʹӨڹΛ༩͑Δʢdyld2ͷ߹ʣ ͦͷͨΊ֤ϑϨʔϜϫʔΫΛελςΟοΫϦϯΫͯ͠ɺ̍ͭͷେ͖ͳμΠφϛοΫϑϨʔϜϫʔΫʹ͢Δ• Ϟδϡʔϧݩͷ͔Εͨঢ়ଶͰࢀর͢ΔͱศརʢΠϯϙʔτίϯύΠϧ͚࣌ͩͳͷͰϑϨʔϜϫʔΫͷߏͱঢ়ଶ͕ҟͳͬͯͳ͍ʣ
Recap• ΠϯϙʔτϞδϡʔϧΛࣗͷίʔυϕʔεͰར༻Մೳʹ͢Δ• ϦϯΫͯ͢ͷϑΝΠϧͷίϯύΠϧޙɺΦϒδΣΫτϑΝΠϧͱϥΠϒϥϦΛ݁߹͢Δ• αʔνύεͱίϯύΠϥϑϥάͰίϯτϩʔϧ• ίϯύΠϥͱϦϯΧίϯϐϡʔλαΠΤϯεͷͲਅΜத• ϨΠϠʔΛ୳ࡧָ͍ͯ͘͠͠͞
Reference• Creation of pure Swift module https://railsware.com/blog/creation-of-pure-swift-module/• Mach-O Universal / Fat Binaries – Symbol Crash https://www.symbolcrash.com/2019/02/26/mach-o-universal-fat-binaries/• Parsing Mach-O files - Low Level Bits https://lowlevelbits.org/parsing-mach-o-files/• Swift Imports https://thoughtbot.com/blog/swift-imports
Reference• Static and Dynamic Libraries https://pewpewthespells.com/blog/static_and_dynamic_libraries.html• Framework vs Library (Cocoa, iOS) – Knowledge Stack http://www.knowstack.com/framework-vs-library-cocoa-ios/• Static linking vs dyld3 https://allegro.tech/2018/05/Static-linking-vs-dyld3.html• Understanding Xcode Build System https://www.vadimbulavin.com/xcode-build-system/
Reference• Static and Dynamic Libraries and Frameworks in iOS https://www.vadimbulavin.com/static-dynamic-frameworks-and-libraries/• Static Library, Dynamic Library and Framework in iOS https://medium.com/@arkilis/static-library-dynamic-library-and-framework-in-ios-df137f29a3e9• Dynamic Versus Static Framework in iOS - CA for Developers https://www.ca.com/en/blog-developers/dynamic-versus-static-framework-in-ios.html• Overview: iOS Static and Dynamic Frameworks and Libraries https://www.runtastic.com/blog/en/frameworks-ios/
Reference• Undocumented Mac OS Xɿୈ12ճɹUniversal Binaryʲલฤʳ (1/5) https://www.itmedia.co.jp/enterprise/articles/0711/30/news014.html• Undocumented Mac OS Xɿୈ13ճɹUniversal Binaryʲޙฤʳ (1/4) https://www.itmedia.co.jp/enterprise/articles/0712/27/news012.html