Framework Programming Guide: Introduction to Framework Programming Guide
ãã®å 容ãèªã¿ã¤ã¤èª¿ã¹ããã¨ãå å³ã㦠Frameworkã«ã¤ãã¦ã¾ã¨ãã。
ãªã iOS ã«ããã¦ã¯ Framework ã®ä»çµã¿ã¯ã·ã¹ãã ã§ãµãã¼ãããã¦ãããã®ã®、ã¦ã¼ã¶ãç¬èªã® Framework ã使ãããã¨ã¯æ¨å¥¨ããã¦ããªã(ããã¥ã¡ã³ããåå¨ããªã)。ã¾ã iOSã§ã¯éçºæã«ã¦ã¼ã¶ãç¬èªã® Frameworkã使ã§ãããã®ã®å®æ©ã¸ã®é ç½®ã¯ã§ããªã[*1]。ãã®çº、ãã®ç¹å¾´ã§ããã³ã¼ãå ±æãåçãªã³ã¯、ãã¼ã¸ã§ã³ç®¡çãªã©ã®Frameworkã使ãä¸ã§ã®æ§ã ãªã¡ãªãã㯠Mac OS X ã®ã¿ã§æå¹ã§ãã、iOSã«ããã¦ã¯ãã®æ©æµãåãããã¨ãã§ããªã。
[*1] embedãªãå¯è½ãããããªã。
ç®æ¬¡
ä»åã¯é·ãã®ã§ç®æ¬¡ãç¨æãã。
- Frameworkã¨ã¯?
- ç¹å¾´
- æ§æãã¿ã¼ã³
- ãã£ã¬ã¯ããª
- Info.plist
- ãã¼ã¸ã§ã³ç®¡ç
- iOS ã MacOSX ã«ãããå®éã®æ§æä¾
- Umbrella Framework
- å®è¡æãªã³ã¯
- Weak Linking
- Frameworkã®ä½æ
- Frameworkã®åæå
- ã·ã³ãã«ã®ã¨ã¯ã¹ãã¼ã
- Frameworkã®é ç½®
- éç¨ã¢ãã«
- é¢é£æ å ±
1. Frameworkã¨ã¯?
Framework Programming Guide: What are Frameworks? ã«ããã°
A framework is a hierarchical directory that encapsulates shared resources, such as a dynamic shared library, nib files, image files, localized strings, header files, and reference documentation in a single package.「Frameworkã¨ã¯、åçå ±æã©ã¤ãã©ãªã nibãã¡ã¤ã«、imageãã¡ã¤ã«、ãã¼ã«ã©ã¤ãºãã¡ã¤ã«、ããããã¡ã¤ã«、ããã¥ã¡ã³ãçã®ãªã½ã¼ã¹ãã¡ã¤ã«ãï¼ã¤ã®ããã±ã¼ã¸ã«ã¾ã¨ãããã£ã¬ã¯ããª」ãæãã¨ã®ãã¨。
(iOSéçºæã®)ã©ã¤ãã©ãªéç¨ã®è¦³ç¹ããããã¨、ããããã¡ã¤ã«ãã©ã¤ãã©ãª(*.a)ã¨ã²ã¨ã¾ã¨ãã«é å¸ã§ããã®ã§ä½¿ãåæããã。ä¾ãã°éçºã§çµã¿è¾¼ãå ´å、ååã¾ã§ã® *.a å½¢æ ã ã¨ä»ã«ããããã¡ã¤ã«ãå¥ã«é ç½®ããªããã°ãªããªã。ãã¡ã¤ã«ãå¤ããªãã¨ãã®ä½æ¥ã¯ç ©éã«ãªã。ã¾ã nib ã imageãã¡ã¤ã«ä»、ä½ã§ãæ ¼ç´ã§ããã®ã§ããããªã½ã¼ã¹ãã¡ã¤ã«ã使ãã©ã¤ãã©ãªã®ç®¡çã容æã«æ±ãã。ãã¼ã«ã©ã¤ãºãå¯è½ãªã®ã§ï¼ã¤ã®ã©ã¤ãã©ãªã§è¤æ°è¨èªã«ã対å¿ãå¯è½。
ã¾ã Framework å ã®ã©ã¤ãã©ãªã¯è¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³ããå ±æãã¦å©ç¨ãããã¨ãã§ãã(åçã©ã¤ãã©ãªã使ç¨ããå ´å)。
2. ç¹å¾´
- éç・åçã©ã¤ãã©ãªã®ä»、nibãã¡ã¤ã«、imageãã¡ã¤ã«、ãã¼ã«ã©ã¤ãºãã¡ã¤ã«、ããããã¡ã¤ã«、ããã¥ã¡ã³ããï¼ã¤ã«ã¾ã¨ãããã¨ãã§ãã [*1]
- ãã£ã¬ã¯ããªæ§æã¯ Core Foundation/Cocoa ã§ãµãã¼ãããã bundleã®å½¢å¼ãåã [*2]
- è¤æ°ã®ãã¼ã¸ã§ã³ããµãã¼ã
- Frameworkã¯èªã¿åãå°ç¨ã®ãªã½ã¼ã¹ã¨ãã¦ã¡ã¢ãªå ã«é ç½®ãã、ä»ã®ããã»ã¹ã¨å ±æãããã¨ã§ã¡ã¢ãªã®ãããããªã³ãã使¸ã§ãã(Mac OS X)
- è¤æ°ã®Framework ãã°ã«ã¼ãåãããã¨ãã§ãã( "umbrella frameworks" ã¨å¼ã°ãã)
[*1] ã©ã¤ãã©ãªãå«ã¾ãªããªã½ã¼ã¹ã ãã® Frameworkã®æ§æãå¯è½(ä¾ãã°ç»åã ããå«ãFrameworkãªã©)
[*2] é常ã®ãã£ã¬ã¯ããªãªã®ã§ Finderã§æ®éã«é²è¦§ãã§ãã(*.appã®ãããªããã±ã¼ã¸å½¢æ ã§ã¯ãªã)
3. æ§æãã¿ã¼ã³
Frameworkã®æ§æã¯ããã¥ã¡ã³ãã«è§£èª¬ããã。
Framework Programming Guide: Anatomy of Framework Bundles
Frameworkãæ§æãããã£ã¬ã¯ããªã®ãã¨ã "Framework Bundles" ã¨å¼ã¶。ä¸è¨ããå³ãå¼ç¨ãã¦ããã¤ãã®æ§æãã¿ã¼ã³ãè¦ã¦ã¿ãã。
ã·ã³ãã«ãªæ§æ
è¤æ°ãã¼ã¸ã§ã³ãå«ãæ§æ
ï¼ã¤ã®ãã¼ã¸ã§ã³(Aã¨B)ãå«ã¿、Versions/Current ã®ã·ã³ããªãã¯ãªã³ã¯å ã§ãã¼ã¸ã§ã³ã®åãæ¿ããè¡ã£ã¦ãã。
ãã®ã¿ã¤ã㯠"versioned bundle" ã¨ãå¼ã°ã、ï¼ã¤ã® Framework Bundlesã§ã¢ããªã±ã¼ã·ã§ã³æ¯ã«ç°ãªããã¼ã¸ã§ã³ã®ã©ã¤ãã©ãªãå©ç¨ãããã¨ãã§ãã。
ãªã½ã¼ã¹ãå«ãæ§æ
è¤æ°ãã¼ã¸ã§ã³ã«å ãã¦、ããããã§è±èªç¨ã®ããã¥ã¡ã³ããªã½ã¼ã¹ãå«ãã§ãã。
4. ãã£ã¬ã¯ããª
Framework Bundles å ã«ç¨æã§ããæ¨æºçãªãã£ã¬ã¯ããªã¯æ¬¡ã®éã。
| Resources | nib, ç»å, é³, ãã¼ã«ã©ã¤ãº, ä» |
| Headers | å ¬éããããã¡ã¤ã«(*.h) |
| Documentation | ããã¥ã¡ã³ã(HTML, PDF) |
| Libraries | Frameworkãå¿ è¦ã¨ããåçã©ã¤ãã©ãª |
Info.plist
Framework Bundles å ã«ã¯é常㮠Bundleã¨åæ§ Info.plist ãè¨ç½®ãã。
Framework Programming Guide: Anatomy of Framework Bundles ãã転è¼。
以ä¸ã¯ CoreLocation.framwork ã® Info.plist ã®ä¾
/System/Library/Frameworks/CoreLocation.framework/Resources/Info.plist
6. ãã¼ã¸ã§ã³ç®¡ç
Framwork Bundles ã§ã¯è¤æ°ã®ãã¼ã¸ã§ã³ã管çã§ãã。
ä¸ã®ä¾ã§ã¯ MyFramework ã A,B,C ã®ï¼ã¤ã®ãã¼ã¸ã§ã³ãæ ¼ç´ããã、ã¢ããªã±ã¼ã·ã§ã³ãããããã«é©ãããã¼ã¸ã§ã³ã®ã©ã¤ãã©ãªãå©ç¨ãã¦ãã。
対象ã¯åçã©ã¤ãã©ãªã®ã¿ã¨ãªã。iOS ã®å ´å、åçã©ã¤ãã©ãªãæ¨å¥¨ãããªãä¸ã«、ç¬èªã§ä½æããFrameworkãé ç½®ãã¦è¤æ°ã¢ããªã±ã¼ã·ã§ã³(ããã»ã¹)éã§å ±æãããã¨ã¯è¡ããªãã®ã§å®è³ªçãªå©ç¨ã¯ Mac OS X ã®ã¿ã«éããã。
ãã¼ã¸ã§ã³ç®¡çã«ã¯ "Major Versions" 㨠"Minor Versions" ã®ï¼ç¨®é¡ã®ã¿ã¤ãã使ãåãã。
Major Versions
- éäºæãã¼ã¸ã§ã³çªå· (incompatible version)ã¨ãã¦ä½ç½®ã¥ãããã
- ãã Major Version ã対象ã¨ãã¦ä½æãããã¢ããªã¯、å¥ã® Major Version ã®ã©ã¤ãã©ãªã§ã¯åä½ããªãå¯è½æ§ãé«ã
- Major Versions 㯠A, B, C, ... ã¢ã«ãã¡ãããã使ã(ã®ãæ £ç¿ã®ããã )
- Major Version ã B ã®å ´å、ãã¡ã¤ã«å㯠libMyLib.B.dylib ã®ããã«ãªã
- å©ç¨ã«ããã£ã¦ã¯ libMyLib.B.dylib -> libMyLib.dylib ã®ããã«ã·ã³ããªãã¯ãªã³ã¯çµç±ã§åç §ããã
- Xcodeã§ Major Versions ãè¨å®ããã«ã¯、ã¿ã¼ã²ããã®æ å ±ãéã、Buildã¿ã→Packaging settings→Framework Version ã§è¨å®ãã
Major Versionãå¤ããã±ã¼ã¹ã¨ãã¦æ¬¡ã®é ç®ãæãããã¦ãã。
- Removing public interfaces, such as a class, function, method, or structure
- Renaming any public interfaces
- Changing the data layout of a structure
- Adding, changing, or reordering the instance variables of a class
- Adding virtual methods to a C++ class
- Reordering the virtual methods of a C++ class
- Changing C++ compilers or compiler versions
- Changing the signature of a public function or method
Minor Versions
- äºææ§ã®ãããã¼ã¸ã§ã³çªå·(compatible versions)ã¨ãã¦ä½ç½®ã¥ãããã
- current version 㨠compatibility version ã®ï¼ã¤ã®çªå·ã使ããã
- current version 㯠Framework ã®ãã¼ã¸ã§ã³ã表ã(ä¿®æ£&ãªãªã¼ã¹ã®åº¦ã«å¢å )
- compatibility version 㯠Framework ããµãã¼ããã current version ã表ã
- Frameworkã®å ¬éã¤ã³ã¿ã¼ãã§ã¤ã¹(public interface)ã夿´ãããå ´å、compatibility version ã current version ã¨åãã«ãã
- ã©ã¤ãã©ãªã®ãµãã¼ãç¯å²: compatilibility version ≦ ã¢ããªãæå¾ ãããã¼ã¸ã§ã³ ≦ current version
- Xcodeã§ Minor Versions ãè¨å®ãã«ã¯、ã¿ã¼ã²ããã®æ å ±ãéã Buildã¿ã→Linking Settings → "Current Library Version" ã«è¨å®ãã。å¿ è¦ãªã "Compatibility version" ãè¨å®ãã。
Minor Verions ã夿´ããã±ã¼ã¹ã¨ãã¦æ¬¡ã®é ç®ãæãããã¦ãã。
- Add a class
- Add methods to an Objective-C class
- Add non-virtual methods to a C++ class
- Add public structures
- Add public functions
- Fix bugs that do not change your public interfaces
- Make enhancements that do not change your public interfaces
7. iOS ã MacOSX ã«ãããå®éã®æ§æä¾
CoreLocation.framework ãä¾ã«å®éã®æ§æãè¦ã¦ã¿ã。ã¾ã㯠iPhoneOS4.2.sdk ã®å ´å。
[SDKãã¼ã¹]/Platforms/iPhoneOS.platform/Developer/SDKs/ iPhoneOS4.2.sdk/System/Library/Frameworks/CoreLocation.frameworkCoreLocation ãã©ã¤ãã©ãª。ä»ã«ããããã¡ã¤ã«ãå«ãã§ãã。CoreLocation ã file ã³ãã³ãã§è¦ã¦ã¿ã㨠arm6 㨠arm7 ã®ï¼ã¤ã®ã¢ã¼ããã¯ãã£ã®åçã©ã¤ãã©ãªãå«ã¾ãã¦ããã®ãããã。
$ file CoreLocation CoreLocation: Mach-O universal binary with 2 architectures CoreLocation (for architecture armv7): Mach-O dynamically linked shared library arm CoreLocation (for architecture armv6): Mach-O dynamically linked shared library armããã«ã¯ã·ãã¥ã¬ã¼ã¿(i386)ç¨ã®ã¢ã¼ããã¯ãã£ã¯å«ã¾ããªã。ã·ãã¥ã¬ã¼ã¿ã¯å¥ã®ãã£ã¬ã¯ããªã«åå¨ãã。
[SDKãã¼ã¹]/Platforms/iPhoneSimulator.platform/Developer/SDKs/ iPhoneSimulator4.2.sdk/System/Library/Frameworks/CoreFoundation.frameworkfileã³ãã³ãã§ã¿ã㨠i386ç¨ã®ã©ã¤ãã©ãªã確èªã§ãã。
$ file CoreLocation CoreLocation: Mach-O dynamically linked shared library i386ã·ãã¥ã¬ã¼ã¿ã®æ¹ã«ã¯ãã¼ã«ã©ã¤ãºç¨ã®ãã¡ã¤ã«ãå«ã¾ãã。
Japanese.lproj å ã«ã¯ InfoPlist.strings 㨠locationd.strings ãå«ã¾ãã。
InfoPlist.strings /* Localized versions of Info.plist keys */ CFBundleName = "CoreLocation";
locationd.strings /* OK button title */ "OK" = "OK"; /* Yes button title */ "DONT_ALLOW" = "許å¯ããªã"; /* " would like to use your current location." */ "LOCATION_CLIENT_PERMISSION" = "“%@”ã¯ç¾å¨ã®ä½ç½®æ å ±ãå©ç¨ãã¾ã。 ããããã§ãã?"; : : /* when we detect that the compass is not calibrated and user is not already moving the phone around */ "COMPASS_CALIBRATION" = "ã³ã³ãã¹ã調æ´ããã«ã¯、iPhoneãæ¯ã£ã¦ãã ãã。";ãªã½ã¼ã¹ãã·ãã¥ã¬ã¼ã¿ç¨Frameworkã«ãã£ã¦、宿©ç¨Frameworkã«å«ã¾ããªãã®ã¯、éçºä¸ã©ã¤ãã©ãªã¯å¿ è¦ã ããªã½ã¼ã¹ã¯å®æ©ä¸ã«ã¯æ¢ã«åå¨ããã¯ããªã®ã§çããã¦ããçºã ã¨æããã。
åã CoreLocation.framework ã«ã¤ã㦠Mac OS X 10.6 ç¨ã® Frameworkãè¦ã¦ã¿ã。
[SDKãã¼ã¹]/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/CoreFoundation.frameworkæ§æã¯iOSç¨ã¨åºæ¬çã«åãã ãã·ã³ããªãã¯ãªã³ã¯ã使ããã¦ãã。
æ ¼ç´ããã¦ããã¢ã¼ããã¯ãã£ã¯ãããªæã。
$ file CoreLocation CoreLocation: Mach-O universal binary with 3 architectures CoreLocation (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 CoreLocation (for architecture i386): Mach-O dynamically linked shared library i386 CoreLocation (for architecture ppc7400): Mach-O dynamically linked shared library ppc64bit、i386ã®ä» ppc ãå ¥ã£ã¦ãã。
ä¸è¨ã¾ã§ã¯éçºç¨ã®SDKã«å«ã¾ãã Frameworkãè¦ã¦ãã。ä»åº¦ã¯ Mac OS X 10.6 ã®ã·ã¹ãã ã§å®éã«ä½¿ããã¦ãã Frameworkãè¦ã¦ã¿ã。
/System/Library/Frameworks/CoreLocation.framework/ã·ãã¥ã¬ã¼ã¿åæ§ãã¼ã«ã©ã¤ãºç¨ãªã½ã¼ã¹ãå ¥ã£ã¦ãã。ã¾ã CoreResources ã _CodeSignature ã¨ãã£ãSDKã«ã¯ç¡ããã£ã¬ã¯ããªãè¦ããã。
ãã®ä»、Resources ãã©ã«ãã«ã¯ç»åãã¡ã¤ã«ãªã©ããã¡ã¤ã«ãåãããã¨ãã§ãã。ä¸è¨ã¯ QuickLook.framwork ã® Resources é ä¸。
[åèæ å ±] Undocumented Mac OS X:第13å Universal Binary【å¾ç·¨】 (3/4) - ITmedia ã¨ã³ã¿ã¼ãã©ã¤ãº
lipo ã file ã³ãã³ãã®ä½¿ãæ¹ãªã©。
8. Umbrella Framework
è¤æ°ã® Frameworkãã°ã«ã¼ãåãã¦ã²ã¨ã¤ã«ã¾ã¨ãããã®ã "Umbrella Framework" ã¨å¼ã¶。åºæ¬çã«ã¯é常㮠Framework ã¨åãæ§æãæã¤ã、次ã®ç¹å¾´ãæã¤。
1. 対象ã¨ãªãFrameworkã®ããããã¡ã¤ã«ãå«ã
2. 対象ã¨ãªãFrameworkãæ ¼ç´ãã(Frameworks ãã£ã¬ã¯ããª)
Mac OS X ã®å ´å、Core Services ãããã«å½ãã。CoreServices.framework ã¯ãããªæã。
è¤æ°ã® Framework ãFrameworks ã«æ ¼ç´ããã¦ããã®ãããã。Headers ã«ã¯ä¸è¨ã®ãã¡ã¤ã«ãæ ¼ç´ããã¦ãã。
CoreServices.h ã®ä¸èº«ãè¦ãã¨å Frameworkã®ããããã¡ã¤ã«ãèªã¿è¾¼ãã§ããã®ãããã。
ãªãç¬èªã® Umbrella Framework ä½æã¯æ¨å¥¨ããã¦ããªã。
Framework Programming Guide: Guidelines for Creating Frameworks - "Dont' Create Umbrella Frameworks"
9. å®è¡æãªã³ã¯
※iOS ã¢ããªã§ã¯åçå ±æã©ã¤ãã©ãªã¯æ¨å¥¨ãããªãã®ã§、ããã®è©±ã¯ Mac OS X åãã¨ãªã。
Framework å ã®åçã©ã¤ãã©ãªã¯å®è¡æã«ãããå¿ è¦ã¨ããã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ãªã³ã¯ããã。Frameworkã¯ã¡ã¢ãªä¸ã«ï¼ã¤ã®ã¿åå¨ãã¦、ãããå¿ è¦ã¨ãããã¹ã¦ã®ã©ã¤ãã©ãªã§å ±æããã。ã¾ããªã³ã¯ã¯ã¢ããªã±ã¼ã·ã§ã³ãå¿ è¦ã¨ãã Framework å ã®ã¢ã¸ã¥ã¼ã«(*.o)åä½ã§è¡ããã。
Framework Programming Guide: Frameworks and Binding ãã
颿° a() ã main() å ã§å¼ã°ããæã« a.o ããªã³ã¯ããã。åæ§ã«é¢æ° b() ã doThat() å ã§å¼ã°ããã¨ãã« b.o ããªã³ã¯ããã。c.o 㯠c() ãå¼ã°ããªãã®ã§ãªã³ã¯ããããã¨ã¯ç¡ã。
ãªã³ã¯æã«ã¯ãã¼ã¸ã§ã³ãã§ãã¯ãè¡ãã、ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãå¿ è¦ã¨ãããã¼ã¸ã§ã³ãFrameworkããµãã¼ããã¦ããªãå ´å、ãã®ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¯å¼·å¶çµäºãã。
ãã®ä»、Framework 㯠Prebinding(å®è¡æãªã³ã¯ã«ãããæéãç縮ããããããããããªã³ã¯ã«å¿ è¦ãªåå¦çãæ½ãã¦ãã)ããµãã¼ããã。詳ããã¯ä¸è¨ãåç §ã®ãã¨。
Framework Programming Guide: Frameworks and Binding - Framework and Prebinding
10. Weak Linking
※ãã㯠Framework ãä½ãå´ã§ã¯ãªã、å©ç¨ããå´ã®è©±
æ°ãããã¼ã¸ã§ã³ã®ã©ã¤ãã©ãªã§æä¾ããæ©è½ãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãå©ç¨ããå ´å、ãã®ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãå¤ããã¼ã¸ã§ã³ããæããªãç°å¢ã§å®è¡ããå ´åã¯ã©ãã·ã¥ãã。
(ä¾)ã¢ããªã±ã¼ã·ã§ã³A ããªã³ã¯ããã©ã¤ãã©ãªã®ãã¼ã¸ã§ã³ 1.2 PC1 ã«åå¨ããã©ã¤ãã©ãªã®ãã¼ã¸ã§ã³ 1.1 PC2 ã«åå¨ããã©ã¤ãã©ãªã®ãã¼ã¸ã§ã³ 1.2ã¢ããªã±ã¼ã·ã§ã³Aãã©ã¤ãã©ãªãã¼ã¸ã§ã³ 1.2 ã§è¿½å ããã颿°ã使ã£ãå ´å、PC1ã§ã¯ã¯ã©ãã·ã¥ããããããã¯èµ·åã§ããªã。Weak Linking ã®ä»çµã¿ã使ãã¨ãã®åé¡ãããç¨åº¦åé¿ã§ãã。
Weak Linking ã使ãã·ã³ãã«(颿°ãã¡ã½ãã)ããªã³ã¯ããã¨、å®è¡æã«ãã®ã·ã³ãã«ãåå¨ããªãã¦ãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã®å®è¡ãç¶ç¶ãããã¨ãã§ãã(ãã ããã®ã·ã³ãã«ãå©ç¨=颿°å¼ã³åºããªã©=ãããã¨ããã¨ã¯ã©ãã·ã¥ãã)。ãã®å ´åã¯è©²å½ããã·ã³ãã«ã®ã¢ãã¬ã¹ã NULL ãã©ãããã§ãã¯ã、éNULLã®æã®ã¿å©ç¨ããããã«ãã。Weak Linking ã使ãã«ã¯é¢æ°ã®ãããã¿ã¤ã宣è¨ã« weak_import 屿§ãæå®ãã。
extern int MyFunction() __attribute__((weak_import)); extern int MyVariable __attribute__((weak_import));Weak Linking æå®ãããã·ã³ãã«ã使ãå ´åã¯ãã®ã·ã³ãã«ã NULLãã©ããããã§ãã¯ã、éNULLã®å ´åã ãå¼ã³åºãããã«ãã。
extern int MyWeakLinkedFunction() __attribute__((weak_import));
int main()
{
int result = 0;
if (MyWeakLinkedFunction != NULL)
{
result = MyWeakLinkedFunction();
}
return result;
}Weak Linkinigè¨å®ã¯ Frameworkå
¨ä½ã«å¯¾ãã¦ãè¡ããã¨ãã§ãã。ãã®å ´å㯠Xcode ã§ãã¬ã¼ã ã¯ã¼ã¯ã鏿ãã¦「å½¹å²」ã "Required" ãã "Weak" ã«å¤æ´ãããã¨ã§è¡ãã。ãããã¯ã¿ã¼ã²ããã®ãã«ãè¨å®å ã®「ä»ã®ãªã³ã¯ãã©ã°」ã«ä¸è¨ã®ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã追å ãã。
-weak_framework <framework_name>
[åèæ å ±] TN 2064:Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X
Weak Linking ã®æ¥æ¬èªè§£èª¬。a)èµ·åã§ããªã、(b)å®è¡ä¸ã«ã¯ã©ãã·ã¥ãã、(c)æ£ããå®è¡ãããæ§çã® Mac OS X ã§ã¯äºåãã¤ã³ãã§ããªã、ã¨ãã£ãã±ã¼ã¹ã«ã¤ãã¦è©³ãã解説ã¨、ãããã®è§£æ±ºçã¨ãã¦ã® Weak Linking ã«ã¤ãã¦ã®èª¬æãããã¦ãã。
[åèæ å ±] iOS 4.0 㨠iPhone OS 3.x ã®ä¸¡æ¹ã§åä½ããã¢ããªã±ã¼ã·ã§ã³ããã«ãããè¨å® - 24/7 twenty-four seven
Xcode ã§ã® Weak Linking è¨å®ã®ä»æ¹ãªã©。
11. Frameworkã®ä½æ
å½åã®ã¬ã¤ãã©ã¤ã³
è¤æ°ã® Framework ã使ãå ´å、ååã®é¢æ°、ã¯ã©ã¹、ã¡ã½ãã(ã«ãã´ãªã®å ´å)ãåå¨ãã¦åé¡ã«ãªãã±ã¼ã¹ããã。ãããé¿ããããã«å½åã®ã¬ã¤ãã©ã¤ã³ãè¨ãããã¦ãã。ã¯ã©ã¹åã®å é ã« Frameworkåã«é¢ä¿ããï¼æåã®ã¢ã«ãã¡ããããä»ä¸ãã。
(ä¾)Core Graphics → "CG"
æ¢åã¯ã©ã¹ã¸ã«ãã´ãªã追å ããå ´å、ã¡ã½ããåç§°ã®å é ã«ãåæ§ã«ï¼æåã®ã¢ã«ãã¡ããããä»ãã。
ãã«ãæè¨å®é ç®
| é ç® | è¨å®æ¹æ³ |
|---|---|
| Framework identifier | Info.plist ãããã¯ã¿ã¼ã²ãã:ããããã£:「èå¥å」 |
| Framework version | Major Versionãæã。ã¿ã¼ã²ãã:ãã«ã:「ãã¬ã¼ã ã¯ã¼ã¯ã®ãã¼ã¸ã§ã³」 |
| Current version | Minor Versionã®ã²ã¨ã¤。ã¿ã¼ã²ãã:ãã«ã:「ç¾å¨ã®ã©ã¤ãã©ãªã®ãã¼ã¸ã§ã³」 |
| Compatibility version | Minor Versionã®ã²ã¨ã¤。ã¿ã¼ã²ãã:ãã«ã:「äºæãã¼ã¸ã§ã³」 |
| Exported symbols | ã¿ã¼ã²ãã:ãã«ã:「æ¸ãã ãããã·ã³ãã«ã®ãã¡ã¤ã«」 |
| Installation path | ã¿ã¼ã²ãã:ãã«ã:「ã¤ã³ã¹ãã¼ã«ãã£ã¬ã¯ããª」 |
| Preferred address | ※Mac OS X 10.4 以éã§ã¯ä¸è¦ |
ãã¹ã
éçºä¸ã® Framework ããã¹ãããå ´å、æ¨æºã®ãã£ã¬ã¯ããª(/Library/Frameworks)ã§ã¯ãªãã§ããã°éçºä¸ã®ãã£ã¬ã¯ããª(build)å ã®ãã¤ããªãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã«ä½¿ãããã。ãã®å ´å、ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å®è¡æã«ç°å¢å¤æ° DYLD_FRAMEWORK_PATH ãè¨å®ãããã¨ã§ä»»æã®å ´æã® Framework ã使ç¨ããããã¨ãã§ãã。(ä¾)DYLD_FRAMEWORK_PATH=/Users/hashi/some/frameworks
embed
Framework ãã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã«çµã¿è¾¼ã(embed)ãããã¨ãã§ãã。ãã®å ´å、Framework ãã¢ããªã±ã¼ã·ã§ã¨ã¯å¥ã«é å¸ããå¿ è¦ãç¡ã。embed ã®æ¹æ³ã¯ä¸è¨ã«æé ãè¨è¼ããã¦ãã。Framework Programming Guide: Creating a Framework
ãã®ä»
(ä¸è¬çã«åçã©ã¤ãã©ãªã使ç¨ãã)Framework ã¯å®è¡æã«ãã¼ãã¨ãªã³ã¯ãè¡ãããçº、ããã©ã¼ãã³ã¹ãåé¡ã«ãªãã±ã¼ã¹ããã(※ãã Prebindingãæ½ããã¦ããå ´å、ãããã³ã¹ãã¯ä½æ¸ããã)。ç¹å®ã®ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ãã¿ã¼ã²ããã«ãã Frameworkã§ä»ã®ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨å ±æããªãå ´åã§ããã©ã¼ãã³ã¹ãåé¡ã«ãªãã±ã¼ã¹ã§ã¯ embed å½¢æ ãæ¤è¨ãã。12. Frameworkã®åæå
Mac OS X 10.4以éã§ã¯ Framework ã®åæåã¨çµäºå¦çã¨ã㦠"Module Initializers" 㨠"Module Finalizers" ãå©ç¨ã§ãã。
Module Initializers
Module Initializer ã¯å¼æ°ã¨æ»ãå¤ãæããªã static颿°ã¨ãã¦è¨è¿°ãã。__attribute__((constructor))
static void MyModuleInitializer()
{
static initialized = 0;
if (!initialized)
{
// Initialization code.
initialized = 1;
}
}å¼ã³åºãé åºã¯æ¬¡ã®éã。- Frameworkå ã® static夿°ãåæå
- Module Initilaizers ãå®è¡
- Frameworkå ã®ã¡ã½ãã、颿°ã®å¼ã³åºã(å©ç¨)
- Module Initializers ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã (ããã»ã¹)æ¯ã« Frameworkããã¼ããããæã«ï¼åº¦ã ãå¼ã³åºããã。
- Module Initializers ã®é¢æ°åã¯ã¨ã¯ã¹ãã¼ãããªã(ãã«ãè¨å®ã®「æ¸ãåºãããªãã·ã³ãã«ã®ãã¡ã¤ã«」ã§æå®ãã)。
- Module Initializer ã¯è¤æ°å®ç¾©ãããã¨ãã§ãã。å¼ã³åºãé ã¯ã³ã³ãã¤ã©ãééããé çªã¨ãªã。
- Module Initializers ã¯ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å®è¡æã®å¼æ°ãåç §ãããã¨ãã§ãã。
___attribute__((constructor))
static void initializer(int argc, char** argv, char** envp)
{
// Initialization code.
}Module Finalizers
Framework ã®çµäºæå¦çãç¨æãããã¨ãã§ãã。__attribute__((destructor))
static void finalizer()
{
// Clean up code.
}Initializers ã¨åæ§ã«è¤æ°ä½æã§ãã。ã¾ãã¨ã¯ã¹ãã¼ãããªãããã«ãã。13. ã·ã³ãã«ã®ã¨ã¯ã¹ãã¼ã
ããã©ã«ãã®åä½ã¨ã㦠Xcodeã®ãªã³ã«ã¯ Frameworkå ã®ãã¹ã¦ã®ã·ã³ãã«ãã¨ã¯ã¹ãã¼ããã。å®è¡æã«ã¯ Dynamic Link editor ã Frameworkã§ã¨ã¯ã¹ãã¼ãããã¦ãããã¹ã¦ã®ã·ã³ãã«ãèªã¿è¾¼ã。ãã®äºã¯å¤é¨ã«å ¬éããå¿ è¦ã®ç¡ãå é¨çãªé¢æ°ãã¡ã½ããã対象ã¨ãªããã¨ãæå³ãã。ãã®çº、ã·ã³ãã«æ°ãå¤ããªããã¼ãæéã®å¢å 、æè¦ã¡ã¢ãªã®å¢å ã¨ãã£ãåé¡ãçããã±ã¼ã¹ããã。ãããé¿ããããã«Xcodeã§ã¯å ¬éããã·ã³ãã«ãæç¤ºçã«æå®ãã¦ãªã³ã¯ããããã¨ãã§ãããªãã·ã§ã³ãç¨æããã¦ãã。æé ã¯æ¬¡ã®ã¨ãã。
1. ã¨ã¯ã¹ãã¼ãããã·ã³ãã«ãæ¸ãã ããããã¹ããã¡ã¤ã«(*.txt)ãç¨æãã。
è¨è¿°ããã·ã³ãã«å㯠nm ã³ãã³ãã§ä¸è¦§ãããã®ã使ã。
(ä¾)$ nm CoreLocation
0000000000007a06 s stub helpers
000000000000666a t +[CLLocationManager locationServicesCapable]
0000000000005d10 t +[CLLocationManager locationServicesEnabled]
:
U _ACInterfaceDeviceNameCopy
U _AuthorizationMakeExternalForm
U _CFBundleCopyExecutableURL
:
0000000000002bf6 T _CLClientAddReferenceLocation
0000000000003bec T _CLClientAllocate
0000000000003053 T _CLClientClearNvramData
0000000000004078 T _CLClientCreate
00000000000037e3 T _CLClientCreateSu
:ããããå
ã«æ¬¡ã®ãããªãã¡ã¤ã«ã使ãã。_CLClientAddReferenceLocation _CLClientAllocate #_CLClientClearNvramDataå é ã« # ãä»ããå ´åã¯ç¡è¦ããã。
2. 使ããããã¹ããã¡ã¤ã«ãããã¸ã§ã¯ãã® Resources ã¸è¿½å ãã。
3. ã¿ã¼ã²ããã®æ å ±ãéããã«ãã¿ãå ã®「æ¸ãã ãããã·ã³ãã«ã®ãã¡ã¤ã«」ã«ãã®ãã¡ã¤ã«åãæå®ãã。
éã«ä¸é¨ã®ã·ã³ãã«ã®ã¿å ¬éããããªãå ´åã¯ãã®ä¸è¦§ãè¨è¼ãããããã¹ããã¡ã¤ã«ã使ã「æ¸ãåºãããªãã·ã³ãã«ã®ãã¡ã¤ã«」ã«æå®ãã。
[åèæ å ±] nm(1) Mac OS X Developer Tools Manual Page
14. Frameworkã®é ç½®
Framework ã®é ç½®å ´æã¯ /Library/Frameworks ã¨ãã以å¤ã®ï¼ã¤ã«åãããã。
/Library/Frameworks
ã·ã¹ãã ã§æ¨æºã«ç¨æããã¦ãããã£ã¬ã¯ããª。è¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³éã§å ±æãã¦å©ç¨ããå ´åã¯ãã®ãã£ã¬ã¯ããªã¸é ç½®ãã。ã¡ãªããã¯、ã³ã³ãã¤ã«æããã³å®è¡æã«æ¨æºã§æ¤ç´¢å¯¾è±¡ã¨ãªããã¨。ãã以å¤ã®å ´æ
~/Library/Frameworks ã /Network/Library/Frameworks、ãã®ä»èªç±ã«é ç½®ãããã¨ãã§ãã。ç¹å®ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã®ã¿ä½¿ç¨ãã Frameworkãªã©ã¯ãããã®ãã£ã¬ã¯ããªã¸é ç½®ãã。èªç±ã«é ç½®ã§ããåé¢、(1)æ¨æºã®æ¤ç´¢å¯¾è±¡ã«ãªããªã(2)èµ·åæéãé ããªãã¨ãã£ããã¡ãªããããã。(1)ã«ã¤ãã¦ã¯、ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã å´ã§ãã«ãããæã«è¨å®ããå¿ è¦ããã。(2)ã«ã¤ãã¦ã¯、ãããã¯ã¼ã¯ä¸ã®ä»ã®ãµã¼ãã«ä¸è¨ãã£ã¬ã¯ããªãåå¨ããå ´åã¯ãããå©ç¨ããã¢ããªã±ã¼ã·ã§ã³ã®èµ·åã«æéããããå ´åããããã¨ãæå³ãã¦ãã。/System/Library/Frameworks
Frameworkã®é ç½®å ´æã¨ãã¦å®ã¯ããä¸ã¤ãã®ãã£ã¬ã¯ããªãåå¨ãã。ãã ããã®ãã£ã¬ã¯ããªã¯ Appleãæä¾ãã Frameworkã®ã¿è¨ç½®ãå¯è½ã§ç¬èª(ãµã¼ããã¼ãã£è£½)ã® Frameworkã¯ããã«ã¯è¨ç½®ãã¦ã¯ãããªã。æ¤ç´¢é åº
å®è¡æã® Frameworkæ¤ç´¢é åºã¯æ¬¡ã®éã。- ãã«ãæ(ãªã³ã¯æ)ã«æå®ããããã¹ ※ããã¯å®è¡ãã¤ããªã«åããã¾ãã¦ãã
- /Library/Frameworks
- /System/Library/Frameworks
15. éç¨ãã¿ã¼ã³
Framework ã®éçºããé å¸・å©ç¨ã¾ã§ã®éç¨ãã¿ã¼ã³ãèãã¦ã¿ã。
Mac OS X - å ¸åãã¿ã¼ã³
å ¸åçãªå©ç¨æ¹æ³ã¨ãã¦ã¯åçã©ã¤ãã©ãªãå«ã Framework ãç¨æãã¦éçºæã«ããããã¡ã¤ã«ã使ç¨ã、å®è¡æã«ãªã³ã¯ãã¦ä½¿ç¨ãã。ã¢ããªã±ã¼ã·ã§ã³ã¨ã¯å¥ã«å®è¡ç°å¢ã¸ Framework ãã¤ã³ã¹ãã¼ã«ããå¿ è¦ããã。ã¡ãªããã¨ãã¦ã¯ï¼ã¤ã® Framework ãè¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³(ããã»ã¹)ã§å ±æãããã¨ãã§ãã。
Mac OS X - embedãã¿ã¼ã³
Framework ã¯ã¢ããªã±ã¼ã·ã§ã³ãã³ãã«ã«åãè¾¼ã (embed)ãããã¨ãã§ãã。ãã®å ´å、å®è¡ç°å¢ã« Frameworkãã¤ã³ã¹ãã¼ã«ããã¦ããå¿ è¦ã¯ç¡ã。ã¡ãªããã¯、é å¸ãç°¡åã§ç¢ºå®ã«å®è¡ã§ãããã¨。
iOS - å ¸åãã¿ã¼ã³
䏿¹ iOS ã®å ´åã¯éçºæã®ã¿ä½¿ããã。éçã©ã¤ãã©ãªã¯ã¢ããªã±ã¼ã·ã§ã³ãã¤ããªã®ä¸é¨ã¨ãã¦æ§æããä¸ç·ã«é å¸ããã。iOS ã®å ´å、Mac OS X ã®ããã«å®æ©ã® /Library/Frameworks ãªã©ã¸åçã©ã¤ãã©ãªãé ç½®ãããã¨ã¯ã§ããªã。ãã®çº、éçºæã®ã¿ã«ä½¿ãéçã©ã¤ãã©ãªã¨ããããã¡ã¤ã«ã®ãã¬ã¼ã¹ãã«ãçãªä½¿ãæ¹ã¨ãªã。
é¢é£æ å ±
Software Delivery Guide: Introduction
ã½ããã¦ã§ã¢é å¸ã®ã¬ã¤ã。Frameworkã®é 叿¹æ³ã«ã¤ãã¦ã触ãããã¦ãã。
Launch Time Performance Guidelines: Introduction to Launch Time Performance Guidelines
ã½ããã¦ã§ã¢èµ·åæéã«é¢ããã¬ã¤ã。Frameworkã«ããã Tipsãè¨è¼ããã¦ãã。



























Responses
Leave a Response