iOSéçºã®äžçã§ã¯ãSwiftã®éçãšå ±ã«å€å žçãªObjective-Cã¯åŸã ã«ãã®èŒããæžå°ãããã¡ã§ããããããå å®ãªåºç€ãšè±å¯ãªè³ç£ãè©°ãŸã£ããã®èšèªã¯ãŸã ãŸã 掻èºã®å ŽãæäŸããŠããŸããããžãã¹ããŒãœã³ã®çæ§ãã©ãããã°è¿ éã«Objective-Cã®åºç€ãææ¡ããiOSéçºã«åœ¹ç«ãŠãããšãã§ããã§ããããïŒæ¬èšäºã§ã¯ãObjective-Cãšãã®éçºç°å¢ã®Xcodeã®ã€ã³ã¹ããŒã«ããå§ããåºæ¬æ§æãå¹ççãªã³ãŒãã¹ãããããå®è·µçãªãããã°æè¡ãå®éã®ã¢ããªã±ãŒã·ã§ã³éçºãŸã§ãããã10åã§èŠç¹ãçµã£ãŠè§£èª¬ããŸãããããèªãã°ãããªããçæéã§iOSéçºã®åºæ¬ãæŽãããšãã§ããã§ãããã
1. iOSéçºå ¥éïŒObjective-Cã®åºç€
1.1 Objective-Cãšã¯äœãïŒ
Objective-Cãšã¯ãCèšèªã«ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®æŠå¿µãè¿œå ããããã°ã©ãã³ã°èšèªã§ããAppleã®iOSãmacOSã®ã¢ããªã±ãŒã·ã§ã³éçºã§é·å¹Žäœ¿çšãããŠããŸãããObjective-Cã¯ãSmalltalkã®ã¡ãã»ãŒãžæåã®ç¹æ§ãåãå ¥ãããè¡šçŸè±ããªèšèªã§ãã
ãã®èšèªã¯äž»ã«iOSã¢ããªã±ãŒã·ã§ã³ã®éçºã«äœ¿ãããŠãããAppleã®Cocoaåã³Cocoa Touchãã¬ãŒã ã¯ãŒã¯ãšæ·±ãçµã³ã€ããŠããŸããçµéšè±å¯ãªCèšèªããã°ã©ããŒã§ããã°èŠªãã¿ããããSmalltalkã®ãããªãªããžã§ã¯ãæåèšèªã®ç¹åŸŽãåŠç¿ããããèšèšã«ãªã£ãŠããŸãã
Objective-Cã¯ããœãããŠã§ã¢ãã¶ã€ã³ãã¿ãŒã³ã®å®è£ ãæ ¹åºãããµããŒãããŠãããMVCïŒModel-View-ControllerïŒãã¿ãŒã³ãªã©ã®ã¢ããªã±ãŒã·ã§ã³èšèšãç°¡åã«è¡ããŸããããã«ãããä¿å®æ§ãåå©çšæ§ãé«ãã³ãŒããæžãããããªã£ãŠããŸãã
1.2 Objective-Cã®æŽå²ãšçºå±
Objective-Cã¯ã1980幎代åãã«Brad CoxãšTom Loveã«ãã£ãŠéçºãããŸããããã®åŸãNeXT Computerã«æ¡çšããããã®èšèªã¯ããŒããŠã§ã¢éçºã®åéã§äººæ°ãéããããšã«ãªããŸããNeXTã¯åŸã«Appleã«è²·åãããObjective-Cã¯Appleã®ãœãããŠã§ã¢éçºèšèªã®äžå¿ãšãªããŸããã
Appleã¯Objective-CãiOSã®éçºã«æ¡çšããApp Storeã§ã®ã¢ããªé ä¿¡ãä¿é²ããŸããããã®ãããäžçäžã®éçºè ãObjective-CãåŠã³ã䜿çšããããã«ãªããŸãããç¹ã«iPhoneã®ç»å Žä»¥éãObjective-Cã¯iOSéçºè å¿ é ã®ã¹ãã«ãšãªã£ãŠããŸãã
ããããè¿å¹Žã§ã¯Appleãæ°ããèšèªSwiftãå°å ¥ããObjective-CããSwiftãžãšç§»è¡ããåããèŠãããŸããããã§ãObjective-Cã¯æ¢åã®å€ãã®ãããžã§ã¯ãããã¬ãŒã ã¯ãŒã¯ã§äœ¿çšããç¶ããŠãããiOSéçºã®åºç€çãªç¥èãšããŠéèŠã§ãã
1.3 Objective-Cã®ç¹åŸŽãšã¡ãªãã
Objective-Cã¯åçãªèšèªã§ãããã©ã³ã¿ã€ã æã«å€ãã®æ±ºå®ãè¡ãããŸããããã«ãããæè»æ§ãé«ããæ¡åŒµæ§ãããã¢ããªã±ãŒã·ã§ã³ã®éçºãå¯èœã§ãããŸããã¡ãã»ãŒãžããã·ã³ã°ã«åºã¥ãããªããžã§ã¯ãæåã®ã¢ãããŒããæ¡çšããŠãããããã³ãŒãã®å¯èªæ§ãåäžããŸãã
Objective-Cã«ã¯ã«ããŽãªããããã³ã«ãšãã£ã匷åãªæ©èœãå«ãŸããŠããããããã¯éçºè ãå¹ççã«ã³ãŒãã管çããåå©çšããã®ãå©ããŸãããŸããCèšèªã®ã©ã€ãã©ãªãAPIãçŽæ¥äœ¿çšããããšãã§ãããããè±å¯ãªãªãœãŒã¹ã掻çšããããšãå¯èœã§ãã
åŒãç¶ããAppleã®å€ãã®ææžãšãµããŒããObjective-Cã«å¯Ÿå¿ããŠãããããéçºã®éã«ã¯åºç¯å²ã®ãªãã¡ã¬ã³ã¹ãåŠç¿ææãå©çšã§ãããšããã¡ãªããããããŸããããã«ãããåå¿è ããäžçŽè ãŸã§å¹ åºãå±€ã®éçºè ãObjective-Cã®æ©æµã享åããŠããŸãã
1.4 Objective-Cã§ã§ããããš
Objective-Cã¯iOSãmacOSã®ã¢ããªã±ãŒã·ã§ã³éçºã«å¿ èŠäžå¯æ¬ ãªèšèªã§ããAppleã®è±å¯ãªãã¬ãŒã ã¯ãŒã¯ãšã®äºææ§ãé«ããUIã®ãã¶ã€ã³ããããŒã¿ã¢ãã«ã®ç®¡çããããã¯ãŒã¯ã®éä¿¡ãŸã§ãã¢ããªã±ãŒã·ã§ã³éçºã«é¢ããããããæ©èœãæäŸããŸãã
ãŸããObjective-Cã¯ã²ãŒã éçºã«ã䜿çšãããŠããŸããäŸãã°ãOpenGL ESãSpriteKitã®ãããªã°ã©ãã£ãã¯ã¹ãšã¢ãã¡ãŒã·ã§ã³é¢é£ã®APIã䜿çšããŠãé«æ§èœã§ã¬ã¹ãã³ã¹ã®è¯ãã²ãŒã ãäœæããããšãã§ããŸãã
ããã«ãããžãã¹ã¢ããªã±ãŒã·ã§ã³ãã«ã¹ã¿ã ããŒã«ã®éçºããObjective-Cã§è¡ãããšãã§ããŸããObjective-Cã¯Appleã®ãšã³ã·ã¹ãã å ã§å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã®éçºã«ãããŠããã®ä¿¡é Œæ§ãšå¹çæ§ã§é·å¹Žã«ããã£ãŠå®è©ããããŸãã
2. ç°å¢æ§ç¯ïŒXcodeãšObjective-C
Xcodeã¯AppleãæäŸãã匷åãªçµ±åéçºç°å¢ïŒIDEïŒã§ããObjective-Cã§ã®iOSã¢ããªéçºãå§ããããã«ã¯ããŸãXcodeãã€ã³ã¹ããŒã«ããããšãå¿ èŠã§ããããã§ã¯ããã®ããã»ã¹ãã¹ã ãŒãºã«è¡ãããã®æé ã説æããŸãã
Xcodeã®ã€ã³ã¹ããŒã«ã¯ãMac App Storeããè¡ãããšãã§ããŸããææ°çã®XcodeãããŠã³ããŒãããã·ã¹ãã ã«åãããèšå®ãæœãããšã§ãéçºã®åºç€ãæŽããŸããã€ã³ã¹ããŒã«åŸã¯ãéçºè æ å ±ãXcodeã«èšå®ããå¿ èŠããããApple Developerã¢ã«ãŠã³ãã«ãã°ã€ã³ããããšã§ãæ§ã ãªéçºããŒã«ãžã®ã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãã
ãŸãã¯XcodeãéããŠã¿ãŸããããèµ·åç»é¢ããã¯ãæ°ãããããžã§ã¯ããäœæããããæ¢åã®ãããžã§ã¯ããéãããã§ããŸããã€ã³ã¿ãŒãã§ã€ã¹ãã«ããŒãã·ãã¥ã¬ãŒã¿ãªã©ãXcodeãæäŸããå€ãã®äŸ¿å©ãªæ©èœã«è§Šãããã£ã³ã¹ã§ãã
2.1 Xcodeã®ã€ã³ã¹ããŒã«ãšèšå®
Xcodeãã€ã³ã¹ããŒã«ããã«ã¯ãAppleã®Mac App Storeã«ã¢ã¯ã»ã¹ãããXcodeããšæ€çŽ¢ããŠããŠã³ããŒãããŸããã€ã³ã¹ããŒã«ãå®äºããããå¿ èŠã«å¿ããŠè¿œå ã®ã³ã³ããŒãã³ããããŠã³ããŒãããããšãæ±ããããå ŽåããããŸãã
次ã«ãXcodeå ã§Apple Developerã¢ã«ãŠã³ããèšå®ããŸãããããè¡ãããšã§ãã¢ããªã®ãã¹ããé åžãApp Storeãžã®å ¬éãå¯èœã«ãªããŸããPreferencesããAccountsã»ã¯ã·ã§ã³ãžé²ã¿ãApple IDã§ãã°ã€ã³ããŠãã ããã
æåŸã«ãXcodeã®Preferencesã§ããã¹ããšãã£ã¿ã®èšå®ãã€ã³ãã³ãããã©ã³ããªã©ãèªå奜ã¿ã«ã«ã¹ã¿ãã€ãºããŸããå¹ççãªã³ãŒãã£ã³ã°ç°å¢ãæŽããŸãããã
2.2 æåã®Objective-Cãããžã§ã¯ãã®äœæ
Objective-Cãããžã§ã¯ããäœæããããã«ã¯ãXcodeãéããCreate a new Xcode projectããéžæããŸããiOSã¢ããªã®éçºãéžã¶ãšãããŸããŸãªãã³ãã¬ãŒããæäŸãããŸãããåå¿è ã«ã¯ãSingle View Appããããããã§ãã
ãããžã§ã¯ãã®èšå®ã§ã¯ããããã¯ãåãããŒã ãçµç¹åãçµç¹èå¥åãªã©ãå ¥åããŸãããããã®æ å ±ã¯ãã¢ããªãäžæã«èå¥ããããã«éèŠã§ãããŸãã䜿çšèšèªãšããŠObjective-CãéžæããŸãããã
èšå®ãçµãã£ãããããžã§ã¯ããçæãããXcodeã®ãããžã§ã¯ãããã²ãŒã¿ã§ãã¡ã€ã«ãèŠãããšãã§ããŸããAppDelegateãViewControllerãªã©ãåºæ¬çãªã¯ã©ã¹ããã§ã«çšæãããŠããŸãã
2.3 Xcodeã®åºæ¬çãªäœ¿ãæ¹
Xcodeã«ã¯æ§ã ãªãŠã£ã³ããŠãšããŒã«ããããŸããäž»èŠãªãã®ã«ã¯ããããŠProject NavigatorãCode EditorãDebug AreaãUtility Areaãå«ãŸããŸããããããã®ç®çã䜿ãæ¹ãç解ããããšãéèŠã§ãã
Code Editorã§ã³ãŒããæžããInterface Builderã䜿ã£ãŠãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãèšèšããŸãããŸãããšã©ãŒãèŠåã¯Issue Navigatorã§ç¢ºèªããDebug Areaã§ã¢ããªããããã°ããããšãã§ããŸãã
å¿ããŠã¯ãªããªãã®ã¯ãã·ã§ãŒãã«ããããŒã®äœ¿çšã§ããå¹ççãªéçºäœæ¥ã®ããã«ããã䜿ãæ©èœã®ã·ã§ãŒãã«ããããŒããã¹ã¿ãŒããã®ãè¯ãã§ãããã
2.4 Objective-Céçºã®ããã®ãã³ã
Objective-Cã¯Cèšèªã«ãªããžã§ã¯ãæåæ©èœãè¿œå ããèšèªã§ãããã®ãããCèšèªã®åºç€ãæŒããã€ã€ãã¯ã©ã¹ãã¡ãœãããããããã£ãªã©ã®ãªããžã§ã¯ãæåã®æŠå¿µã«ç¿çããããšãéèŠã§ãã
ãŸããã¡ã¢ãªç®¡çã¯Objective-Céçºã«ãããŠéµãšãªãéšåã§ããç¹ã«åæããŒãžã§ã³ã§ã¯æåã§ã®ç®¡çãå¿ èŠã§ããããARCïŒAutomatic Reference CountingïŒã®å°å ¥ã«ãããå€ãã®é¢åãªäœæ¥ãã解æŸãããŸãã
æåŸã«ãå®è·µã§ã®ã³ãŒãã£ã³ã°ã«ãããŠã¯ããªãŒããã«ã³ãŒããå¿ãããŸããããä»ã®éçºè ãã³ãŒããç解ãããããããŒã ã§ã®ã³ã©ãã¬ãŒã·ã§ã³ã«ãããŠãã¹ã ãŒãºãªäœæ¥ãå¯èœã§ãã
ãã®çãã¬ã€ãããObjective-CãšXcodeã®åºæ¬ãå¹æçã«æŽãããã®åºçºç¹ãšãªãã°å¹žãã§ãããããããããiOSã¢ããªéçºã®æ ãå§ããŸãããã
3. Objective-Cã®æ§æã®ç¿åŸ
Objective-Cã¯Cèšèªã«ã¡ãã»ãŒãžæåã®æ©èœãå ããããã°ã©ãã³ã°èšèªã§ããçŸåšãiOSã¢ããªéçºã«ãããŠSwiftãšäžŠãã§çšããããŠããŸãããiOSã®åºç€ãšãªãCocoaã¿ãããã¬ãŒã ã¯ãŒã¯ã¯ãäž»ã«Objective-Cã§æžãããŠããŸãã
Objective-Cãå¹æçã«åŠã¶ããã«ã¯ããŸããã®åºæ¬æ§æãšããã°ã©ã ã®æµãã«æ £ããããšãéèŠã§ããäžã€äžã€ã®æ§æãç解ãããããçµã¿åãããŠããã°ã©ã ãäœãèœåã身ã«ã€ããŸãã
ããã«ãObjective-Cã®è±å¯ãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®ç¥èãæ·±ããããšã§ãããè€éãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãã§ããããã«ãªããŸãããããã®ã¹ããããèžãããšã§ãObjective-Cã«é¢ããç·åçãªç解ãæ·±ããããšãå¯èœã§ãã
3.1 Objective-Cã®åºæ¬æ§æãšãããŒ
Objective-Cã®æ§æã¯Cèšèªãåºç€ãšããŠãããããCèšèªã®ç¥èãæã£ãŠãããšåŠç¿ãã¹ã ãŒãºã§ããObjective-Cç¹æã®ç¹åŸŽãšããŠãã¡ãã»ãŒãžãéãããã®è§æ¬åŒ§ã®äœ¿çšããã¡ãœãã宣èšã«ããããã€ãã³ïŒ-ïŒããã©ã¹ïŒ+ïŒã®äœ¿çšããããŸãã
ããã°ã©ã ã®ãããŒã¯æ§é äœãå¶åŸ¡æãã«ãŒããªã©Cèšèªã®åºæ¬çãªæ§æèŠçŽ ã«å ããŠãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åãã¡ãã»ãŒãžããã·ã³ã°ãšãã£ããªããžã§ã¯ãæåã®ã³ã³ã»ãããåãå ¥ãããã®ã«ãªããŸãã
ãããã®åºæ¬çãªæ§æãšæµããææ¡ããæ¥åžžçãªã³ãŒãã£ã³ã°ã«æ £ããããšãåå¿è ã«ãšã£ãŠã¯å¿ èŠäžå¯æ¬ ã§ãããµã³ãã«ã³ãŒããåçµããããå°ããªãããžã§ã¯ããéããŠåŸã ã«æ £ããŠããããšããå§ãããŸãã
3.2 é¢æ°ãšã¡ãœããã®å®çŸ©
Objective-Cã§ã¯é¢æ°ãšã¡ãœããã®äºã€ãåºå¥ããŸããé¢æ°ã¯Cèšèªã®é¢æ°ãšåæ§ã«ãç¹å®ã®ã¿ã¹ã¯ãå®è¡ããããã«ç¬ç«ããã³ãŒããããã¯ãšããŠå®çŸ©ãããŸããå¯Ÿç §çã«ãã¡ãœããã¯ã¯ã©ã¹ã«å±ããŠããããªããžã§ã¯ãã®æ¯ãèããå®çŸ©ããŸãã
ã¡ãœããã®å®£èšã¯æ»ãå€ã®åã®åã«ãã€ãã¹ïŒã€ã³ã¹ã¿ã³ã¹ã¡ãœããïŒãŸãã¯ãã©ã¹ïŒã¯ã©ã¹ã¡ãœããïŒã眮ãããšã§è¡ãããŸãããããã®å®£èšæ¹æ³ã«æ £ããããšã§ãç®çã«å¿ããæ£ããåã®ã¡ãœãããäœæããããšãã§ããŸãã
ããã«ãã¡ãœããã®å®è£ ã§ã¯ããã©ã¡ãŒã¿ãšæ»ãå€ãé©åã«æ±ããã³ãŒãã®åå©çšæ§ãšã¯ãªãŒã³ãªèšèšãå¿ãããããšã倧åã§ããããããèžãŸããäžã§ã¡ãœãããäœæããããšã§ãä¿å®æ§ã®é«ãããã°ã©ã ãæžãããšãã§ããããã«ãªããŸãã
3.3 ãªããžã§ã¯ããšã¯ã©ã¹ã®ç®¡ç
Objective-Cã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ãããŠãã¯ã©ã¹ãšã€ã³ã¹ã¿ã³ã¹ã®ç®¡çã¯äžå¿çãªåœ¹å²ãæãããŸããã¯ã©ã¹ã¯ãªããžã§ã¯ãã®éåçã§ãããã€ã³ã¹ã¿ã³ã¹ã¯ã¯ã©ã¹ã«åºã¥ããŠçæãããåã ã®ãªããžã§ã¯ãã§ãã
ã¯ã©ã¹ãå®çŸ©ããéã¯ãã€ã³ã¿ãŒãã§ãŒã¹éšåã§ããããã£ãšã¡ãœããã宣èšããå®è£ éšåã§ã¡ãœããã®å ·äœçãªåäœãèšè¿°ããŸãããã®åé¢ã«ãããã³ãŒãã®èŠéããè¯ããªããæ©èœããšã®ã¢ãžã¥ãŒã«åãå¯èœã«ãªããŸãã
ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹åãã¡ã¢ãªç®¡çãç¶æ¿ãªã©ã®æŠå¿µããObjective-Cã«ãããã¯ã©ã¹ç®¡çã®éèŠãªèŠçŽ ã§ãããããããã¹ã¿ãŒããããšã§ãå¹ççãã€å®å šã«ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãè¡ãããšãã§ããŸãã
3.4 Objective-Cã®ããŒã¿åãšã³ã¬ã¯ã·ã§ã³
Objective-Cã¯å€æ§ãªããŒã¿åãå©çšã§ããŸããåºæ¬çãªããŒã¿åã¯Cèšèªããç¶æ¿ããããã®ã§ãããæŽæ°åïŒint, longãªã©ïŒãæµ®åå°æ°ç¹åïŒfloat, doubleïŒãæååïŒcharïŒããããŸãã
å ããŠãObjective-Cã«ã¯NSStringãNSArrayãNSDictionaryãªã©ã®ã¯ã©ã¹ããŒã¹ã®ããŒã¿åããããŸãããããã¯ãªããžã§ã¯ããšããŠæ±ãããæååã®æäœãã³ã¬ã¯ã·ã§ã³ã®ç®¡çã«ç¹åããæ©èœãæäŸããŠããŸãã
ãããã®åºæ¬çãªããŒã¿åãšãã€ã¬ãã«ãªã³ã¬ã¯ã·ã§ã³åãé©åã«äœ¿ãåããããšã§ãããŸããŸãªããŒã¿æ§é ãç°¡åãã€å¹ççã«æ±ãããšãã§ããããã«ãªããŸããããŒã¿åã®éžæã¯ããã°ã©ã ã®æ§èœãšã¡ã¢ãªäœ¿çšã«çŽçµããããã泚ææ·±ãéžã¶å¿ èŠããããŸãã
4. å®çšçãªã³ãŒãã¹ãããããšäŸ
iOSã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠãObjective-Cã¯äŸç¶ãšããŠéèŠãªåœ¹å²ãæãããŠããŸããããã§ã¯å®éã®éçºã·ãŒã³ã§å³æŠåãšãªãObjective-Cã®ã³ãŒãã¹ããããã玹ä»ããŸããå¿ããéçºè ãiOSéçºã®ååŠè ã«ãšã£ãŠããã®å®çšçãªäŸãããè¯ãç解ãšå¹ççãªã³ãŒãã£ã³ã°ãžã®äžå©ãšãªãã§ãããã
4.1 åºæ¬çãªUIã³ã³ããŒãã³ãã®äœæ
Objective-Cã§æãäžè¬çãªUIã³ã³ããŒãã³ãã¯UIButtonã§ãã以äžã®ã³ãŒãã¹ããããã¯UIButtonãçæãã芪ãã¥ãŒã«è¿œå ããæ¹æ³ã瀺ããŠããŸãã
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [button setTitle:@"Press Me" forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button];
ãã®äŸã§ã¯ãã¢ã¯ã·ã§ã³ããã¿ã³ã«ãªã³ã¯ããããšã§ããŠãŒã¶ãŒããã¿ã³ãã¿ããããéã«`buttonPressed:`ã¡ãœãããåŒã³åºãããŸããUIã³ã³ããŒãã³ãã®ã«ã¹ã¿ãã€ãºã¯ããžã¥ã¢ã«ãšãŠãŒã¶ãŒäœéšã®äž¡æ¹ã«åœ±é¿ãäžããŸãã®ã§ãããããåºæ¬ãæŒãããŠããããšãéèŠã§ãã
4.2 ããŒã¿ã®ä¿åãšèªã¿èŸŒã¿
ãŠãŒã¶ãŒããŒã¿ã®ä¿åã«ã¯NSUserDefaultsã䜿çšããããšããããããŸããäžèšã®ã¹ããããã¯NSUserDefaultsãçšããŠç°¡åãªããŒã¿ã®ä¿åãšèªã¿èŸŒã¿ãè¡ãæ¹æ³ã瀺ããŠããŸãã
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"Test Value" forKey:@"TestKey"]; [defaults synchronize]; NSString *savedValue = [defaults objectForKey:@"TestKey"];
ãã®æ¹åŒã¯å°èŠæš¡ãªããŒã¿ããã°ããä¿åããéã«éåžžã«äŸ¿å©ã§ãããã¢ããªéã§ã®èšå®å€ã®å ±æããã»ãã·ã§ã³æ å ±ã®ä¿æã«ã䜿çšã§ããŸãã
4.3 ãããã¯ãŒã¯éä¿¡ãšAPIã®æ±ã
Objective-Cã§ã®ãããã¯ãŒã¯ãªã¯ãšã¹ãã®äœææ¹æ³ã¯ããã€ããããŸãããNSURLSessionã䜿çšããæ¹æ³ãæšæºçã§ãã以äžã¯HTTP GETãªã¯ãšã¹ããè¡ããJSONã¬ã¹ãã³ã¹ãåãåãäŸã§ãã
NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:@"https://example.com/api"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"Response: %@", json); } }]; [dataTask resume];
ãã®ã³ãŒãã¯éåæã§åäœãããããã¯ãŒã¯ã¬ã¹ãã³ã¹ããã£ãæç¹ã§ãããã¯å ã®åŠçãå®è¡ãããŸãããã®ããã«ããŠAPIããããŒã¿ãååŸããã¢ããªå ã§æŽ»çšããããšãã§ããŸãã
4.4 ãšã©ãŒãã³ããªã³ã°ã®ãã¹ããã©ã¯ãã£ã¹
ãšã©ãŒãã³ããªã³ã°ã¯ã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠæ¥µããŠéèŠã§ããObjective-Cã§ã¯NSErrorã¯ã©ã¹ã䜿çšããŠãšã©ãŒãåŠçããŸãã以äžã¯ç°¡åãªãšã©ãŒãã³ããªã³ã°ã®äŸã§ãã
NSError *error = nil; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"]; NSString *fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; if (error) { NSLog(@"Error reading file: %@", error.localizedDescription); } else { NSLog(@"File contents: %@", fileContents); }
ãšã©ãŒãªããžã§ã¯ãã®localizeDescriptionããããã£ã䜿çšããããšã§ããŠãŒã¶ãŒã«ãšã£ãŠæå³ã®ãããšã©ãŒã¡ãã»ãŒãžãæäŸã§ããŸããé©åãªãšã©ãŒãã³ããªã³ã°ãè¡ãããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ããå ç¢ã§äœ¿ãããããã®ã«ãªããŸãã
5. ãããã°ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°
ã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠããããã°ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ã¹ãã«ã¯äžå¯æ¬ ã§ããObjective-Cã§éçºãããiOSã¢ããªã±ãŒã·ã§ã³ã®å Žåãæ§ã ãªããŒã«ãšãã¯ããã¯ã䜿çšããããšã§å¹ççãªãããã°ãå¯èœãšãªããŸãã
ããã§ã¯XcodeãšããéçºããŒã«ã䜿çšããŠãå¹ççã«ãã°ãç¹å®ããã¢ããªã±ãŒã·ã§ã³ã®ãã©ãã«ã解決ããæ¹æ³ã«ã€ããŠèª¬æããŸããå ·äœçãªã¹ããããšãã³ããæäŸããããšã§ãéçºéçšã«ãããé害ãæå°éã«æããããšãã§ããŸãã
ãŸãããããã°ããã»ã¹ãåæ»ã«é²ããããã«ã¯ãã³ãŒãã®ç解ã ãã§ãªããXcodeã®ãããã°æ©èœã«æ £ããããšãéèŠã§ãããã®ããããã®ã»ã¯ã·ã§ã³ã§ã¯ãXcodeãæäŸãããããã°ããŒã«ã®åºæ¬ãããããé«åºŠãªäœ¿ãæ¹ãŸã§ãã«ããŒããŠãããŸãã
5.1 Xcodeå ã§ã®ãããã°æ¹æ³
Xcodeã«ã¯ãããã°ã®ããã®å€æ°ã®æ©èœãå èµãããŠããŸãããŸãã¯ããšãã£ã¿ãšãªã¢ã§ã®ã³ãŒãã®åé¡ç®æãç¹å®ããããã®æ©èœããå§ããŸããããããã§ã¯ãåé¡ã®ããã³ãŒããå®è¡åã«èŠã€ãåºãã³ã³ãã€ã«ãšã©ãŒãã¯ãŒãã³ã°ã«æ³šç®ãéãŸããŸãã
次ã«ãã©ã³ã¿ã€ã äžã®ãã°ãç¹å®ããã®ã«åœ¹ç«ã€æ©èœããã³ã³ãœãŒã«ãå€æ°ãã¥ãŒã§ããã³ã³ãœãŒã«ã䜿çšãããšå®è¡æã«çºçããã¡ãã»ãŒãžã確èªã§ããå€æ°ãã¥ãŒã§ã¯ã¢ããªãå®è¡äžã«å€æ°ã®å€ããŠã©ããã§ããŸãã
ãŸããXcodeã®Visual Debuggerãå©çšããããšã§ãUIã®ã¬ã€ã¢ãŠãåé¡ãèŠèŠçã«ç¹å®ããããšãã§ããŸãããããã®ããŒã«ãçµã¿åãããããšã§ãå¹æçãªãããã°ãè¡ããããã«ãªããŸãã
5.2 ãã°ãšãã¬ãŒã¯ãã€ã³ãã®æŽ»çš
ãã°åºåã¯ãããã°ã«ãããŠæ¬ ãããªãææ³ã®äžã€ã§ããNSLogé¢æ°ã䜿çšããããšã§ãã³ãŒãã®ç¹å®ã®ãã€ã³ãã§æ å ±ãã³ã³ãœãŒã«ã«åºåã§ããåé¡çºçç®æã®ç¹å®ãã¢ããªã±ãŒã·ã§ã³ã®æå確èªã«åœ¹ç«ã¡ãŸãã
äžæ¹ããã¬ãŒã¯ãã€ã³ããèšå®ããããšã§ãç¹å®ã®ã³ãŒãã©ã€ã³ã®å®è¡æã«ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãäžæåæ¢ããããã®æç¹ã§ã®å€æ°ã®å€ãåŒã³åºãã¹ã¿ãã¯ãªã©ã詳ãã調ã¹ãããšãã§ããŸããXcodeã®ãã¬ãŒã¯ãã€ã³ãããã²ãŒã¿ã䜿ãã°ããã¬ãŒã¯ãã€ã³ãã®ç®¡çãç°¡åã§ãã
ãã¬ãŒã¯ãã€ã³ãã«ã¯æ¡ä»¶ä»ãã®ãã®ãèšå®ããããšãã§ããç¹å®ã®æ¡ä»¶ãæºããããæã®ã¿å®è¡ãåæ¢ããããèšå®å¯èœã§ãããã®æ¹æ³ã¯å®è¡ãã¹ãå€å²ã«ãããè€éãªãã°ã®è¿œè·¡ã«ãããŠãç¹ã«æå¹ã§ãã
5.3 ããã©ãŒãã³ã¹ã®æé©å
ããã©ãŒãã³ã¹ã®æé©åã¯ããããã°ãšåæ§ã«éèŠã§ããããã©ãŒãã³ã¹åé¡ãç¹å®ããããã«ãXcodeã«ã¯Instrumentsãšãã匷åãªããŒã«ããããŸããããã䜿ããšãã¡ã¢ãªã®äœ¿çšç¶æ³ãCPUã®äœ¿çšçãã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ãªã©ãåæã§ããŸãã
ã¡ã¢ãªãªãŒã¯ã¯ç¹ã«åä»ãªåé¡ã§ãããInstrumentsã®LeaksããŒã«ã䜿çšããã°ãäžèŠã«ãªã£ããªããžã§ã¯ãã解æŸãããã«ã¡ã¢ãªã«æ®ã£ãŠããŸã£ãŠããåé¡ãæ€åºã§ããŸãããŸããTime Profilerã䜿çšããã°ãCPUæéãå€ãæ¶è²»ããŠããã³ãŒããèå¥ã§ããŸãã
åçš®ãªãœãŒã¹ã®äœ¿çšç¶æ³ãç解ããæé©åããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã ãŒãºãªåäœãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžãå³ãããšãã§ããŸããå®æçãªããã©ãŒãã³ã¹ãã§ãã¯ãšæ¹åã¯ãå質ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæäŸããããã«äžå¯æ¬ ãªã¹ãããã§ãã
5.4 è¯ããããšã©ãŒãšè§£æ±ºç
Objective-Cã§iOSã¢ããªãéçºããéã«åºéãå¯èœæ§ãããããã€ãã®äžè¬çãªãšã©ãŒã«ã¯ãNULLãã€ã³ã¿ã®åç §ãé åã®ã€ã³ããã¯ã¹éåãã¡ã¢ãªãªãŒã¯ãªã©ããããŸãããããã®åé¡ã«å¯ŸåŠããããã«ã¯ããšã©ãŒã¡ãã»ãŒãžãäžå¯§ã«èªã¿è§£ããã³ãŒããæ éã«ã¬ãã¥ãŒããããšã倧åã§ãã
NULLãã€ã³ã¿ã®åç §ã¯ããªããžã§ã¯ããåæåãããŠããªãå Žåã«ããçºçããŸãããããé²ãããã«ã¯åæåã®åŠçãèŠçŽãå¿ èŠããããŸãããŸããé åæäœã§ã¯ãåžžã«é åã®é·ãããã§ãã¯ããç¯å²ãè¶ ããªãããã«ããããšãéèŠã§ãã
ã¡ã¢ãªãªãŒã¯ã«ã€ããŠã¯ãARCïŒAutomatic Reference CountingïŒãæå¹ã«ããããšã§å€ãã®ã±ãŒã¹ãé²ãããšãã§ããŸãããããã§ãçºçããããšããããŸãããã®å Žåã¯Instrumentsã®å©çšãæå¹ã§ãããããã®ãšã©ãŒãžã®å¯Ÿçãç¿åŸããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãé«ããããšãã§ããŸãã
6. å®éã®ã¢ããªã±ãŒã·ã§ã³éçºãžã®å¿çš
Objective-Cã䜿çšããiOSã¢ããªã±ãŒã·ã§ã³éçºã§ã¯ãå€ãã®æŠå¿µãšæè¡ã絡ã¿åã£ãŠããŸããçæéã§ãããã解説ããããã«ãéèŠãªãã€ã³ãã«çµã蟌ã¿ãå®éã®ã¢ããªéçºãžå¿çšããããã®åºæ¬ãæŒãããŸããéçºè ã«ãšã£ãŠå¿ é ã®MVCã¢ãŒããã¯ãã£ããŠãŒã¶ãŒãçŽæ¥è§Šããã€ã³ã¿ãŒãã§ãŒã¹ã®èšèšãã°ããŒãã«ãªåžå Žã§ç«¶äºããããã®å€èšèªå¯Ÿå¿ãšã¢ã¯ã»ã·ããªãã£ããããŠã¢ããªãªãªãŒã¹åŸã®éçšã«ã€ããŠè§£èª¬ããŸãã
6.1 MVCãã¿ãŒã³ã®ç解ãšäœ¿çš
MVCïŒModel-View-ControllerïŒãã¿ãŒã³ã¯iOSã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠåºæ¬ãšãªãã¢ãŒããã¯ãã£ã§ããã¢ãã«ã¯ããŒã¿ãšããžãã¹ããžãã¯ãæ åœãããã¥ãŒã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãè¡šããã³ã³ãããŒã©ã¯ã¢ãã«ãšãã¥ãŒã®æ©æž¡ããè¡ããŸãããã®åé¢ãå¹æçãªéçºãå¯èœã«ããä¿å®æ§ãåå©çšæ§ã®åäžã«å¯äžããŸãã
çãæéã§è§£èª¬ããã«ã¯ãå ·äœçãªäŸãæ瀺ããããšãå¹æçã§ããäŸãã°ããŠãŒã¶ãŒæ å ±ã衚瀺ããã·ã³ãã«ãªç»é¢ã§ã¯ããŠãŒã¶ãŒã¢ãã«ãæ å ±ãä¿æãããã¥ãŒããããã¬ã€ã¢ãŠãããã³ã³ãããŒã©ããŠãŒã¶ãŒã®å ¥åã«åºã¥ããŠã¢ãã«ãæŽæ°ããæµããææ¡ããŸãããã
MVCãã¿ãŒã³ã®éµå®ã¯ãåå¿è éçºè ãã³ãŒãã®è²¬ä»»ãã¯ã£ããåºåãããäžã§ãéåžžã«åœ¹ç«ã€æéãšãªããŸããã³ãŒãããŒã¹ã倧ãããªãã«ã€ããŠãã®ãã¿ãŒã³ã®æçšæ§ãé¡èã«ãªããããåæ段éãããã£ãããšç解ããŠããããšããåŸã®éçºã«å€§ããªå©ç¹ãšãªããŸãã
6.2 ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®èšèšãšå®è£
èŠãç®ãšäœ¿ãåæãè¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã«ãšã£ãŠé åçã§ããObjective-Cã䜿çšããã«ããããUIKitãªã©ã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããè±å¯ãªUIã³ã³ããŒãã³ãã掻çšããŠãçŽæçãªã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããããšãéèŠã§ãã
ãã¿ã³ãããŒãã«ãã¥ãŒãããã²ãŒã·ã§ã³ããŒãªã©ãäžè¬çãªUIèŠçŽ ã®é 眮ãšã«ã¹ã¿ãã€ãºæ¹æ³ãåŠã¶ããšã¯ãåå¿è ã«ãšã£ãŠã圹ç«ã¡ãŸããAuto Layoutã䜿ã£ãŠç°ãªãç»é¢ãµã€ãºã«å¯Ÿå¿ãããflexibleãªUIãæ§ç¯ããæè¡ãéèŠãªãã€ã³ãã§ãã
å ããŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®ãã¹ãã¯ã¢ããªã±ãŒã·ã§ã³ã®å質ãä¿èšŒããäžã§æ¬ ãããŸãããå®æ©ããšãã¥ã¬ãŒã¿ã䜿çšãããã¹ãã ãã§ãªããåäœãã¹ããUIãã¹ããã³ãŒãã£ã³ã°ããããšã§ãããå ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãéçºããããšãã§ããŸãã
6.3 å€èšèªå¯Ÿå¿ãšã¢ã¯ã»ã·ããªãã£
ã°ããŒãã«åžå Žã§ã¯å€èšèªå¯Ÿå¿ãäžå¯æ¬ ã§ããObjective-CãšiOSéçºç°å¢ã«ã¯ããã®å¯Ÿå¿ã容æã«ããããã®LocalizationïŒããŒã«ãªãŒãŒã·ã§ã³ïŒæ©èœãåãã£ãŠããŸããããŒã«ãªãŒãŒã·ã§ã³ãã¡ã€ã«ãã¹ããŒãªãŒããŒãã§èšèªããšã®ãªãœãŒã¹ç®¡çãè¡ããå€èšèªãŠãŒã¶ãŒã«åãããäœéšãæäŸããŸãã
åæ§ã«ãã¢ã¯ã»ã·ããªãã£ãžã®é æ ®ãéèŠã§ããVoiceOverã®ãµããŒãããã€ãããã¯ã¿ã€ãã«ãããã©ã³ããµã€ãºèª¿æŽãè²ç²ãèŠèªæ§ãèæ ®ãããã¶ã€ã³ãªã©ããã¹ãŠã®ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãå¿«é©ã«å©çšã§ãããã工倫ãããŸãããã
ãããã®æ©èœã¯ãéçºã®æ©ã段éããæèããŠåãçµãã¹ãã§ããæçµçãªã¢ããªã±ãŒã·ã§ã³ã®å質ãšãŠãŒã¶ãŒæºè¶³åºŠã«çŽçµãããããç¹ã«åœéçãªåžå Žã«åããã¢ããªã±ãŒã·ã§ã³ã§ã¯äžå¯æ¬ ãªèŠçŽ ãšãªããŸãã
6.4 ã¢ããªã®ãªãªãŒã¹ãšã¢ããããŒãã®é ä¿¡
éçºããã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã®æã«æž¡ãããã«ã¯ãApp Storeã§ã®å ¬éãå¿ èŠã§ãããã®ããã»ã¹ã¯ããããžã§ã¯ãã®èšå®ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ãã³ã°ãApp Store Connectã§ã®ã¡ã¿ããŒã¿èšå®ãªã©ãããã€ãã®ã¹ããããèŠããŸãã
ãŸãããªãªãŒã¹åŸã®ã¢ããããŒãé ä¿¡ã¯ãã¢ããªã±ãŒã·ã§ã³ãçŸåœ¹ã§æŽ»çšããŠããäžã§æ¬ ãããªãéšåã§ãããã°ä¿®æ£ãæ°æ©èœã®è¿œå ãããŒããŠã§ã¢ã®æŽæ°ã«åãããä»æ§å€æŽãªã©ãã¢ããªã±ãŒã·ã§ã³ã¯åžžã«é²åãç¶ããŠãããªããã°ãªããŸããã
ã¢ããããŒãã®éã¯ããŠãŒã¶ãŒã®ãã£ãŒãããã¯ã倧åã«ãããšåæã«ãæ°ããOSã®æ©èœãå©çšãããããã©ãããã©ãŒã ã®ã¬ã€ãã©ã€ã³ã«éµå®ãããããããšã§ãåžžã«æé«ã®ãŠãŒã¶ãŒäœéšãæäŸããããšãå¿ãããŸãããã