
iOSéçºè ããã¯ãå©çšå¯èœãªããŸããŸãªãµãŒãããŒãã£ã©ã€ãã©ãªãæäŸããçŽ æŽãããã³ãã¥ããã£ã§ãã
ãã®ãã©ãããã©ãŒã çšã«éçºããå Žåããããããããã®ã©ã€ãã©ãªãŒã®å°ãªããšã1ã€ã䜿çšããã§ãããã AFNetworking ã SDWebImage ã SSKeychainããŸãã¯CocoaLumberjackã§ãã£ãŠãããè»èŒªã®åçºæããæ°ã«å ¥ããªãå Žåã¯ãä»äººã®ã³ãŒãã䜿çšããããšã®éèŠæ§ããã§ã«ç解ããŠããã¯ãã§ãã
CocoaPodsããããŸãã äœããã®çç±ã§ãã®åªããããŒã«ã«æ £ããŠããªãå Žåãããã¯æã人æ°ã®ããäŸåé¢ä¿ãããŒãžã£ãŒã§ããããããžã§ã¯ãã«ãã®ãããªã©ã€ãã©ãªãçµ±åããããã»ã¹ãç°¡çŽ åããŸãã
CocoaPods㯠iOSã³ãã¥ããã£ã§åºã䜿çšãããŠããã Googleã§ãããã䜿çšããŠããŸããŸãªiOS SDKãé åžããŠããŸãã
CocoaPodsã¯çŽ æŽãããäŸåé¢ä¿ç®¡çããŒã«ã§ãããä»ã®ãªãã·ã§ã³ããããŸãã ã«ã«ã¿ãŽã¯ãã®ãããªãªãã·ã§ã³ã®1ã€ã§ãã ããã¯ãGithubã®éçºããŒã ãäœæãããMacããã³iOSçšã®å·é ·ãªã·ã³ãã«ãªäŸåé¢ä¿ãããŒãžã£ãŒã§ãã
ããã¯ã Swiftã§åäœããæåã®äŸåé¢ä¿ãããŒãžã£ãŒã§ããã å®éã ã«ã«ã¿ãŽèªäœã¯Swiftã§æžãããŠããŸãïŒ éçã©ã€ãã©ãªã§ã¯ãªããåçãã¬ãŒã ã¯ãŒã¯ã®ã¿ã䜿çšããŸããããã¯ã iOS 8以éã§ãµããŒããããŠããSwiftãã€ããªãé åžããæ¹æ³ã«ãããŸããã
ãã®Carthageã®èšäºã§ã¯ã次ã®ããšãåŠã³ãŸãã
- äŸåé¢ä¿ãããŒãžã£ãŒã䜿çšããçç±ãšã¿ã€ãã³ã°ãããã³Carthageãšä»ã®äŸåé¢ä¿ãããŒãžã£ãŒã®éãã¯äœã§ãã
- ã«ã«ã¿ãŽã®ã€ã³ã¹ããŒã«æ¹æ³
- äŸåé¢ä¿ã®å®£èšãã€ã³ã¹ããŒã«ãããã³ãããžã§ã¯ããžã®çµ±å
- ç°ãªãããŒãžã§ã³ã®äŸåé¢ä¿ã®æŽæ°
- DuckDuckGo APIã䜿çšããŠé衚瀺ã®åèªã®å®çŸ©ãèŠã€ããã¢ããªã±ãŒã·ã§ã³ãäœæãã
æ³šïŒ ãã®èšäºã¯ã iOSããã³Swiftèšèªã®éçºã®åºæ¬ã«æ¢ã«ç²ŸéããŠããã Xcodeéçºç°å¢ã«ç²ŸéããŠãããã³ãã³ãã©ã€ã³ã§äœæ¥ã§ãã人ã察象ãšããŠããŸãã
ããå§ããŸããã
ãŸããäœæ¥ããã¹ã¿ãŒã¿ãŒãããžã§ã¯ããããŠã³ããŒãããŸãã
ããã«ã¯ã DuckDuckGo APIã䜿çšããŠåèªå®çŸ©ãèŠã€ããããã®ã·ã³ãã«ãªããŒã«ã§ããDuckDuckDefineã® ãã¹ã±ã«ãã³ããå«ãŸããŠããŸã ã çŸæç¹ã§ã¯ãåé¡ã¯1ã€ãããããŸãããå®éã«ã¯æ€çŽ¢ãå®è¡ããŸããã
Xcodeã§ãããžã§ã¯ããéããããã«ç²ŸéããŸãã 2ã€ã®ã³ã³ãããŒã©ãŒã«æ³šæããŠãã ãããSearchViewControllerã¯ãŠãŒã¶ãŒãæ€çŽ¢ãå®è¡ããããã®æ€çŽ¢ããŒãæäŸãã DefinitionViewControllerã¯æ€çŽ¢çšèªã®å®çŸ©ã衚瀺ããŸãã
äž»ãªäœæ¥ã¯DuckDuckGo.swiftãã¡ã€ã«ã§è¡ãããŸã-ãŸãã¯ãå°ãªããšããããžã§ã¯ãã®äœæ¥ãå®äºãããŸã§ã«ã¯ããã«ãããŸãïŒ çŸæç¹ã§ã¯ã performSearchïŒ_ïŒcompletion :)ã¡ãœããã¯æ laã§ç¡é§ãªã³ãŒããããã¯ã§ãã
æ€çŽ¢ãå®è¡ããã«ã¯ã2ã€ã®ããšãè¡ãå¿ èŠããããŸãã
- DuckDuckGo APIã䜿çšããŠãªã¯ãšã¹ããè¡ã
- JSON圢åŒã§åãåã£ããªã¯ãšã¹ãã«å¿ããŠããŒã¿ãåæ/解æããŸã
ãããã®2ã€ã®ã¿ã¹ã¯ã®åŠçã«åœ¹ç«ã€å€ãã®ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªããããŸãã Alamofireã¯ã¯ãšãªäœæãç°¡çŽ åãã倧èŠæš¡ãªSwiftã©ã€ãã©ãªã§ããã SwiftyJSONã¯Swiftã§ãã楜ããJSONãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã ãããŠäœã ãšæãïŒ
Carthageã䜿çšããŠããããã®äŸåé¢ä¿ããããžã§ã¯ãã«è¿œå ããŸãã
äŸåé¢ä¿ç®¡ç
AlamofireãšSwiftyJSONããããžã§ã¯ãã«è¿œå ããã«ã¯ããã¡ããGithubã®ããããã®ããŒãžã«ã¢ã¯ã»ã¹ããŠããœãŒã¹ã³ãŒããå«ãzipãã¡ã€ã«ãã¢ããããŒããããããžã§ã¯ãã«ã³ããŒããŸãã ã§ã¯ããªãCarthageã®ãããªããŒã«ã䜿çšããã®ã§ããããïŒ
äŸåé¢ä¿ãããŒãžã£ãŒã¯ãããã€ãã®äŸ¿å©ãªæ©èœãå®è¡ããŸãã
- ãµãŒãããŒãã£ã®ã³ãŒããååŸããŠãããžã§ã¯ãã«çµã¿èŸŒãããã»ã¹ãç°¡çŽ åããæšæºåããŸãã ãã®ãããªããŒã«ããªããã°ããœãŒã¹ã³ãŒããã¡ã€ã«ãã³ããŒããããã³ã³ãã€ã«ããããã€ããªãã¡ã€ã«ãã³ããŒããããGitãµãã¢ãžã¥ãŒã«ãªã©ã®ã¡ã«ããºã ã䜿çšããŠãæåã§ãããè¡ãããšãã§ããŸãã
- ãµãŒãããŒãã£ã®ã©ã€ãã©ãªãç°¡åã«ã¢ããã°ã¬ãŒãã§ããŸãã githubã®åäŸåé¢ä¿ã«ã¢ã¯ã»ã¹ãããœãŒã¹ã³ãŒããããŠã³ããŒãããæŽæ°ããããã³ã«ãããžã§ã¯ãã«ã³ããŒããå¿ èŠããããšæ³åããŠãã ããã èªåã§ãã£ãŠã¿ãŸãããïŒ
- 䜿çšããäŸåé¢ä¿ã®é©åã§äºææ§ã®ããããŒãžã§ã³ãéžæããŸãã ããšãã°ãæåã§äŸåé¢ä¿ãè¿œå ããå Žåãçžäºã«äŸåããŠããå Žåãå¥ã®äŸåé¢ä¿ãå ±æããŠããå Žåã¯ç¶æ³ãé£ãããªãå¯èœæ§ããããŸãã

ã»ãšãã©ã®äŸåé¢ä¿ãããŒãžã£ãŒã¯ããããžã§ã¯ãã®äŸåé¢ä¿ãšãããã®åãµãäŸåé¢ä¿ããäŸåé¢ä¿ã°ã©ããäœæãã䜿çšããããããã®æé©ãªããŒãžã§ã³ã決å®ããŸãã
åãããšãæåã§è¡ãããšãã§ããŸãããè²»çšã¯ãããã§ããïŒ ããªãã®æ£æ°ïŒ
ã«ã«ã¿ãŽvsã³ã³ã¢ããã
ããã§ã¯ãCarthageã¯CocoaPodsãšã©ã®ããã«æ£ç¢ºã«ç°ãªãã®ã§ããïŒãŸããiOSã§æã人æ°ã®ããäŸåé¢ä¿ãããŒãžã£ãŒä»¥å€ã®ããŒã«ã䜿çšããçç±ã¯äœã§ããïŒ
Carthageã®éçºè ã¯ãCocoaPodsã¯é垞䜿ããããããããã§ã¯ãªãããšãçºèŠããŸããã Carthageã®èåŸã«ããåºæ¬ååã¯ããã®ããŒã«ã¯å®¹èµŠãªãã·ã³ãã«ã§ãªããã°ãªããªããšããããšã§ãã
CocoaPodsã¯ãã¢ããªã±ãŒã·ã§ã³éçºãšã©ã€ãã©ãªé åžããã»ã¹ã®äž¡æ¹ã«è€éããè¿œå ããŸãã
- ã©ã€ãã©ãªã¯ãPodspecãã¡ã€ã«ãäœæãæŽæ°ãå«ããå¿ èŠããããŸãïŒãŸãã¯ãã¢ããªã±ãŒã·ã§ã³éçºè ãã©ã€ãã©ãªã«ãªãå Žåãç¬èªã®ãã¡ã€ã«ãäœæããå¿ èŠããããŸãïŒã
- ãããããããããžã§ã¯ãã«è¿œå ãããšãCocoaPodsã¯åã ã®ãããããšã«ã¿ãŒã²ãããæã€æ°ããXcodeãããžã§ã¯ããäœæããŸãã 次ã«ãã¯ãŒã¯ã¹ããŒã¹ã䜿çšããŠãCocoaPodsãããžã§ã¯ããæ£åžžã«åäœããŠããããšã確èªããå¿ èŠããããŸãã ãµããŒãã®ããã®å€æ°ã®è¿œå ã®ã¢ã»ã³ããªèšå®ã«ã€ããŠè©±ããŸãããã
- CocoaPods PodspecsããŒã¿ãŠã§ã¢ããŠã¹ã¯äžå åãããŠãããäœããã®çç±ã§æ¶ãããå©çšã§ããªããªã£ãããããšåé¡ãçºçããå¯èœæ§ããããŸãã

Carthageãããžã§ã¯ãã®ç®æšã¯ãCocoaPodsãããã·ã³ãã«ãªããŒã«ãæäŸããããšã§ãã ç解ãããããä¿å®ãããããæè»æ§ãé«ããã®ã§ãã
ããã¯ããã€ãã®æ¹æ³ã§å®çŸãããŸãã
- Carthageã¯ãããžã§ã¯ããå€æŽããããã¯ãŒã¯ã¹ããŒã¹ã®äœ¿çšã匷å¶ãããããããšã¯ãããŸããã
- ã©ã€ãã©ãªäœæè ãããããéä¿¡ããããã«ã Podspecsãäžå€®ããŒã¿ãŠã§ã¢ããŠã¹ã¯å¿ èŠãããŸããã ãããžã§ã¯ãã¯ãã¬ãŒã ã¯ãŒã¯ãšããŠéçºã§ãã Carthageã§äœ¿çšã§ããŸãã GitãšXcodeããã®æ¢åã®æ å ±ãçŽæ¥äœ¿çšããŸãã
- ã«ã«ã¿ãŽã¯éæ³ã®ãããªããšã¯äœãããŸããã ããªãã¯åžžã«ã³ã³ãããŒã«ãããŠããŸãã ãããžã§ã¯ããšCarthageã«äŸåé¢ä¿ãæåã§è¿œå ããããããæœåºããŠäœæããŸãã
æ³šïŒ Carthageã¯ãã·ã³ãã«ããå®çŸããããã«åçãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã ã€ãŸãããããžã§ã¯ãã¯iOS 8以éããµããŒãããå¿ èŠããããŸãã
åºæ¬çãªæŠå¿µãããã£ãã®ã§ãä»åºŠã¯å®éã«Carthageãšã¯äœããåŠã³ãŸãã
Carthageãã€ã³ã¹ããŒã«
Carthageã®äžæ žã«ã¯ãäŸåé¢ä¿ã®ååŸãšäœæãæ¯æŽããã³ãã³ãã©ã€ã³ããŒã«ããããŸãã
ã€ã³ã¹ããŒã«ã«ã¯2ã€ã®æ¹æ³ããããŸããææ°ããŒãžã§ã³ã®.pkgã€ã³ã¹ããŒã©ãŒãããŠã³ããŒãããŠå®è¡ãããã Homebrewããã±ãŒãžãããŒãžã£ãŒã䜿çšããŸãã CarthageãCocoaéçºããã±ãŒãžã®ã€ã³ã¹ããŒã«ãæ¯æŽããããã«ã Homebrewã¯Unixããã³OS Xçšã®äŸ¿å©ãªããŒã«ã®ã€ã³ã¹ããŒã«ãæ¯æŽããŸãã
ä»æ¥ã¯ã .pkgã€ã³ã¹ããŒã©ãŒã䜿çšããŸãã Carthageã®ææ°ããŒãžã§ã³ãããŠã³ããŒãããCarthage.pkgãããã«ã¯ãªãã¯ããŠã€ã³ã¹ããŒã©ãŒãèµ·åããŸãã [ ç¶è¡ ]ãã¯ãªãã¯ããŠãã€ã³ã¹ããŒã«ããå ŽæãéžæããããäžåºŠ[ ç¶è¡ ]ãã¯ãªãã¯ããŠãæåŸã«[ ã€ã³ã¹ããŒã« ] ãã¯ãªãã¯ããŸã ã
æ³šïŒ ã€ã³ã¹ããŒã©ãŒãå®è¡ããããšãããšãã Carthage.pkgãã¡ã€ã«ã¯äžæãªéçºè ã®ãã®ã§ããããéãããšãã§ããªã ããšããã¡ãã»ãŒãžã衚瀺ãããå ŽåããããŸãã ããã®å Žåã¯ãã€ã³ã¹ããŒã©ãŒãã¯ãªãã¯ããŠãã³ã³ããã¹ãã¡ãã¥ãŒããã éã ããéžæããŸãã
ã§ããïŒ Carthageãæ£ããã€ã³ã¹ããŒã«ãããŠããããšã確èªããã«ã¯ã次ã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
carthage version
ãã¹ãŠãèšç»ã©ããã«é²ãã å Žåãã€ã³ã¹ããŒã«ãããCarthageã®ããŒãžã§ã³çªå·ã衚瀺ãããŸãã
æ³šïŒ ãã®èšäºã®å·çæç¹ã§ã¯ãCarthageã®çŸåšã®ããŒãžã§ã³ã¯0.10.0ã§ããã
ããã«Carthageã®å Žåãã€ã³ã¹ããŒã«ããå¿ èŠã®ããã©ã€ãã©ãªãæå®ããå¿ èŠããããŸãã ããã¯Cartfileã䜿çšããŠè¡ãããŸãã

Cartfileã®äœæ
Cartfileã¯ãCarthageã®ãããžã§ã¯ãã®äŸåé¢ä¿ã説æããåçŽãªããã¹ããã¡ã€ã«ã§ãããããã€ã³ã¹ããŒã«ãããã®ã決å®ããŸãã Cartfileã®åè¡ã¯ãäŸåé¢ä¿ãååŸããå ŽæãäŸåé¢ä¿ã®ååãå¿ èŠã«å¿ããŠäœ¿çšãããäŸåé¢ä¿ã®ããŒãžã§ã³ã瀺ããŸãã Cartfileã¯CocoaPods Podfileã«äŒŒãŠã ãŸã ã
ã¿ãŒããã«ãéãã cdã³ãã³ãã䜿çšããŠãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªïŒ.xcodeprojãã¡ã€ã«ãå«ããã£ã¬ã¯ããªïŒã«ç§»åããŸãã
cd ~/Path/To/Starter/Project
touchã³ãã³ãã§ç©ºã®CartfileãäœæããŸãã
touch Cartfile
次ã«ããã®ãã¡ã€ã«ãXcodeã§éããŠç·šéããŸãã
open -a Xcode Cartfile
Vimã®ãããªå¥ã®ããã¹ããšãã£ã¿ã«æ £ããŠããå Žåã¯ãæ°è»œã«äœ¿çšããŠãã ããã ãã ãã TextEditã䜿çšããŠãã¡ã€ã«ãç·šéããªãã§ãã ããã TextEditã䜿çšãããšãçŽæ¥åŒçšç¬Šã®ä»£ããã«ããããã èªååŒçšç¬Š ãã䜿çšããã®ãç°¡åã«ãªããCarthageãå°ç¡ãã«ããŸãã
次ã®è¡ãcartfileã«è¿œå ããŠä¿åããŸãã
github "Alamofire/Alamofire" == 2.0 github "SwiftyJSON/SwiftyJSON" ~> 2.3.0
圌ãã¯ããªãã®ãããžã§ã¯ããAlamofireããŒãžã§ã³2.0ããã³ããŒãžã§ã³2.3.0ãšäºææ§ã®ããSwiftyJSONã®ææ°ããŒãžã§ã³ãå¿ èŠãšããããšãCarthageã«äŒããŸãã
ã«ãŒããã¡ã€ã«åœ¢åŒ
ã«ãŒããã¡ã€ã«ã¯ã OGDL ïŒ é åºä»ãã°ã©ãããŒã¿èšèªã®ãµãã»ããã§èšè¿°ãããŠããŸãã ç°åžžã«èãããŸãããå®éã«ã¯éåžžã«åçŽã§ãã Cartfileã®åè¡ã«ã¯ã2ã€ã®éèŠãªæ å ±ããããŸãã
- äžæ¯ã®åå ïŒããã¯äžæ¯ãååŸããå Žæãã«ãŒã»ãŒãžã«äŒããŸãã Carthageã¯2çš®é¡ã®ãœãŒã¹ããµããŒãããŠããŸãã
- ãã¹ããããGithubãããžã§ã¯ãã®github ïŒååã®ããŒã«ãããïŒïŒã äžèšã®Cartfileã§è¡ã£ãããã«ã Username / ProjectNameã®åœ¢åŒã§Githubãããžã§ã¯ããå®çŸ©ããŸãã
- ä»ã®å Žæã§ãã¹ãããããŠãããŒãµã«Gitãªããžããªã®git ã gitããŒã¯ãŒãã®åŸã«ââã¯ã gitïŒ// ã httpïŒ// ããŸãã¯sshïŒ//ã䜿çšãããªã¢ãŒãURLã§ããããéçºè ã®ã³ââã³ãã¥ãŒã¿ãŒäžã®gitãªããžããªãžã®ããŒã«ã«ãã¹ã§ãããã«ããããããgitãªããžããªãžã®ãã¹ãç¶ããŸãã
- äŸåããŒãžã§ã³ïŒããã¯ã䜿çšããããŒãžã§ã³ãCarthageã«äŒããæ¹æ³ã§ãã æ£ç¢ºãã®çšåºŠã«å¿ããŠãããã€ãã®ãªãã·ã§ã³ããããŸãã
- == 1.0ã¯ãããŒãžã§ã³1.0ãæ£ç¢ºã«äœ¿çšãããããšãæå³ããŸã
- > = 1.0ã¯ãããŒãžã§ã³1.0以éã䜿çšãããããšãæå³ããŸã
- ã> 1.0ã¯ã1.0ãšäºææ§ã®ããããŒãžã§ã³ã䜿çšãããããšãæå³ããŸããã€ãŸããå®éã«ã¯ã次ã®ããŒãžã§ã³ãŸã§ã®ä»»æã®ããŒãžã§ã³ã䜿çšã§ããŸãã
- ã> 1.7.5ãæå®ãããšã1.7.5ãã2.0ãå«ãŸãªãããŒãžã§ã³ãŸã§ã®ãã¹ãŠã®ããŒãžã§ã³ãäºææ§ããããšèŠãªãããŸãã
- ããã«ãã> 2.0ãæå®ãããšã Carthageã¯ããŒãžã§ã³2.0以éã䜿çšããŸããã3.0æªæºã§ãã
- äºææ§ã¯ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã«åºã¥ããŠããŸã-詳现ã«ã€ããŠã¯ãã¬ã€ãã Swift㧠CocoaPodsã䜿çšããããåç §ããŠãã ããã
- ãã©ã³ãå/ã¿ã°å/ã³ãããåã¯ãUse git branch / tag / commit ããæå³ããŸãã ããšãã°ãmasterãæå®ãããã5c8a74aãšããŠã³ãããã§ããŸãã
ããŒãžã§ã³ãæå®ããªãå ŽåãCarthageã¯åã«ä»ã®äŸåé¢ä¿ãšäºææ§ã®ããææ°ããŒãžã§ã³ã䜿çšããŸãã Carthageã®READMEãã¡ã€ã«ã§ããããã®åãªãã·ã§ã³ã®äŸãCarthageã§å®éã«èŠãããšãã§ããŸãã
äŸåé¢ä¿ãäœæãã
Cartfileãã¡ã€ã«ãå®æããã®ã§ãããã䜿çšããŠããã€ãã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
Xcodeã§CartfileãéããŠã¿ãŒããã«ã«æ»ãã次ã®ã³ãã³ããå®è¡ããŸãã
carthage update --platform iOS
ããã«ããã Carthageã¯Cartfileå ã®æå®ããããã¹ããGitãªããžããªãŒãè€è£œããäŸåé¢ä¿ããšã«ãã¬ãŒã ã¯ãŒã¯ãäœæããŸãã äœãèµ·ãã£ãã®ãã瀺ãçµæãåŸãããã¯ãã§ãã
*** Fetching SwiftyJSON *** Fetching Alamofire *** Checking out Alamofire at "2.0.0" *** Checking out SwiftyJSON at "2.3.0" *** xcodebuild output can be found in /var/folders/h8/qp5163ln7mz2d7_l_yn6hd0m0000gp/T/carthage-xcodebuild.HBRNcq.log *** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
IOSèšå®ã«ããããã¬ãŒã ã¯ãŒã¯ãiOSå°çšã«äœæãããŸãã ãã©ãããã©ãŒã ãæå®ããªãå Žåãããã©ã«ãã§ãã©ã€ãã©ãªããµããŒããããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯ïŒå€ãã®å ŽåMacããã³iOS ïŒã«å¯ŸããŠCarthageãäœæããŸãã
è¿œå ã®ãªãã·ã§ã³ã確èªãããå Žåã¯ã carthageã®æŽæ°ã«é¢ãããã«ããéå§ã§ããŸãã
ããã©ã«ãã§ã¯ãCarthageã¯ãããã°ãè¡ããCartfileãã¡ã€ã«ãšåãå Žæã«Carthageãšããæ°ãããã£ã¬ã¯ããªãäœæããŸãã 次ã®ã³ãã³ãã§ãã®ãã£ã¬ã¯ããªãéããŸãã
open Carthage
BuildãšCheckoutsã® 2ã€ã®ãã£ã¬ã¯ããªãå«ãFinderãããã¢ããã衚瀺ãããŸãã Carthageãããªãã®ããã«äœæãããã®ãèŠãŠãã ããã

ã¢ãŒãã£ãã¡ã¯ã
CocoaPodsã«ç²ŸéããŠããå Žåããããžã§ã¯ãã«ããã€ãã®å€æŽãå ãã Xcodeã¯ãŒã¯ã¹ããŒã¹ã®ç¹å¥ãªPodsãããžã§ã¯ãã«ãªã³ã¯ããŠããããšãããããŸã ã
ã«ã«ã¿ãŽã¯å°ãç°ãªããŸãã äŸåé¢ä¿ã®ã³ãŒãããã§ãã¯ããããããã¬ãŒã ã¯ãŒã¯ã«åã蟌ã¿ãããããããžã§ã¯ãã«çµ±åãããã©ããã決å®ããŸãã ããªãã¯ããå€ãã®äœåãªä»äºãããããã«èŠããŸãããããã¯æçã§ãã æ°åããããããŸãããããããžã§ã¯ãã®å€æŽãããããç解ã§ããŸãã
ã«ã«ã¿ãŽãã¢ããã°ã¬ãŒããããšãã«ã«ã¿ãŽã¯ããã€ãã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªãäœæããŸãïŒ

- Cartfile.resolvedïŒãã®ãã¡ã€ã«ã¯Cartfileãè£å®ãããã®ãšããŠäœæãããŸãã Carthageãã€ã³ã¹ããŒã«çšã«éžæããäŸåé¢ä¿ã®ããŒãžã§ã³ãå€å¥ããŸãã ãã®ãã¡ã€ã«ãããŒãžã§ã³ç®¡çãã£ã¬ã¯ããªã«è»¢éããããšã匷ããå§ãããŸãããã¡ã€ã«ããããšãä»ã®éçºè ãããªããšãŸã£ããåãããŒãžã§ã³ã®äŸåé¢ä¿ã䜿çšããŠããã«éå§ã§ããããã«ãªããŸãã
- Carthageãã£ã¬ã¯ããªã«ã¯ã2ã€ã®ãµããã£ã¬ã¯ããªãå«ãŸããŠããŸãã
- ãã«ãïŒããã«ã¯ãåäŸåé¢ä¿ã®çµã¿èŸŒã¿ãã¬ãŒã ã¯ãŒã¯ãå«ãŸããŠããŸãã ãããã¯ãããžã§ã¯ãã«çµ±åã§ããè¿ãå°æ¥äœæããŸãã åãã¬ãŒã ã¯ãŒã¯ã¯ããœãŒã¹ããäœæãããããGithubã®ãªãªãŒã¹ãããžã§ã¯ãããŒãžããããŠã³ããŒããããŸãã
- ãã§ãã¯ã¢ãŠãïŒããã§ã Carthageã¯ããã¬ãŒã ã¯ãŒã¯ã«åã蟌ãããšãã§ããåäŸåé¢ä¿ã®ãœãŒã¹ã³ãŒãããã§ãã¯ããŸãã Carthageã¯ç¬èªã®å
éšäŸåé¢ä¿ãªããžããªãã£ãã·ã¥ãä¿æãããããç°ãªããããžã§ã¯ãã«å¯ŸããŠåããœãŒã¹ãè€æ°åè€è£œããå¿
èŠã¯ãããŸããã
Buildãã£ã¬ã¯ããªãšCheckoutsãã£ã¬ã¯ããªããªããžããªã«ã³ããŒãããã©ããã¯ãããªã次第ã§ãã ããã¯å¿ ãããå¿ èŠã§ã¯ãããŸãããããªããžããªã®ã¯ããŒã³ãäœæãã人ã¯åžžã«ããã€ããªãäŸåé¢ä¿ã®ãœãŒã¹ããã€ã§ãèªç±ã«äœ¿çšã§ããããšãæå³ããŸãã
ããã¯ãããšãã°ã Githubãå©çšã§ããªãå ŽåãããœãŒã¹ã³ãŒããªããžããªãå®å šã«åé€ãããå Žåã«ãã¯ãªãŒã³ãªããã¯ã¢ãããåŸããããªã©ãæçšãªä¿éºããªã·ãŒã«ãªããŸãã Checkoutsãã©ã«ããŒã®ã³ãŒãã¯å€æŽããªãã§ãã ããããã®å 容ã¯ãä»åŸã®ã«ã«ã¿ãŽæŽæ°ãŸãã¯checkoutã³ãã³ãã«ãã£ãŠãã€ã§ãäžæžããããå¯èœæ§ããããäœæ¥ã¯ããã«æ¶ããŠããŸããŸãã
äŸåé¢ä¿ã®å€æŽãå¿ èŠãªå Žåã¯ããµãã¢ãžã¥ãŒã«ãªãã·ã§ã³ã䜿çšããŠã«ã«ã¿ãŽãæŽæ°ã§ããŸãã
ãã®ãªãã·ã§ã³ã䜿çšãããšãCarthageã¯åäŸåé¢ä¿ããµãã¢ãžã¥ãŒã«ãšããŠGitãªããžããªã® Checkoutsãã©ã«ããŒã«è¿œå ããŸããã€ãŸããäŸåé¢ä¿ã®ãœãŒã¹ãå€æŽããæžãæããæããã«ãããã®å€æŽãã³ãããããã³ç§»åã§ããŸãã
æ³šïŒ ä»ã®ãŠãŒã¶ãŒããããžã§ã¯ãã䜿çšããå¿ èŠããããäœæãããã¬ãŒã ã¯ãŒã¯ãã³ãããããªãã£ãå Žåããããžã§ã¯ããè€è£œããåŸã«ã«ã«ã¿ãŽããŒãã¹ãã©ãããå®è¡ããå¿ èŠããããŸãã
bootstrapã³ãã³ãã¯ã Cartfile.resolvedã§å®çŸ©ãããŠããäŸåé¢ä¿ããæ£ç¢ºãªããŒãžã§ã³ãããŠã³ããŒãããŠäœæããŸãã
äžæ¹ãã«ã«ã¿ãŽãæŽæ°ãããšãå¿ èŠãªäŸåé¢ä¿ããšã«ææ°ã®äºæããŒãžã§ã³ã䜿çšããããã«ãããžã§ã¯ããæŽæ°ãããŸãã
ããŠãäžçæžåœäœæãããããã®ã¢ãŒãã£ãã¡ã¯ãã䜿çšããŠã¯ã©ãã§ãããã
ãã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«è¿œå ãã
Xcodeã§éå§ãããžã§ã¯ãããŸã éããŠããªãå Žåã¯éããProject Navigatorã§ãããžã§ã¯ã DuckDuckDefineãã¯ãªãã¯ããŸãã DuckDuckDefineã¿ãŒã²ãããéžæããäžéšã®[ å šè¬ ]ã¿ããéžæããŠã[ ãªã³ã¯ããããã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãª]ã»ã¯ã·ã§ã³ãŸã§ã¹ã¯ããŒã«ããŸãã
FinderãŠã£ã³ããŠã§ã Carthageãã£ã¬ã¯ããªã«ç§»åããŠããã Build \ iOSã«ç§»åããŸãã 次ã«ã Alamofire.frameworkãšSwiftyJSON.frameworkãXcodeã®Linked Frameworks and Librariesã»ã¯ã·ã§ã³ã«ç§»åããŸã ã

ããã«ãããã¢ããªã±ãŒã·ã§ã³ããããã®ãã¬ãŒã ã¯ãŒã¯ã«ãªã³ã¯ããç¬èªã®ã³ãŒãã§äœ¿çšã§ããããã«ãªããŸãã
次ã«ã ãã«ããã§ãŒãºã«é²ã¿ãæ°ããRun Scriptãè¿œå ããŸã ã 次ã®ã³ãã³ããè¿œå ããŸãã
/usr/local/bin/carthage copy-frameworks
[ å ¥åãã¡ã€ã«]ã®äžã®[ +]ãã¯ãªãã¯ããŠãåãã©ãããã©ãŒã ã®ãšã³ããªãè¿œå ããŸãã
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework $(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework
å³å¯ã«èšãã°ããã®æ§ç¯æé ã¯ãããžã§ã¯ããå®è¡ããããã«å¿ èŠã§ã¯ãããŸããã ãã ããããã¯ãAppStoreã«ã¢ããªã±ãŒã·ã§ã³ãéä¿¡ãããšãã«çºçããå¯èœæ§ã®ããåé¡ã®ããªãããŒãªåé¿çã§ãããiOSã·ãã¥ã¬ãŒã¿ãŒã®ãã€ããªã€ã¡ãŒãžãå«ããã¬ãŒã ã¯ãŒã¯ãæã€ã¢ããªã±ãŒã·ã§ã³ã¯èªåçã«æåŠãããŸãã
æ°ãããã®ã¯è¡šç€ºãããŸããããã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããæåŸ ã©ããã«ãã¹ãŠãæ©èœãç¶ããããšã確èªããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãæ€çŽ¢å¯èœãªç»é¢ã衚瀺ãããŸãã

çŽ æŽãããã ä»ã§ã¯ãã¹ãŠãããããã ã 次ã¯ãäŸåé¢ä¿ã®æŽæ°ã§ãã
ãã¬ãŒã ã¯ãŒã¯ã®æŽæ°
ç§ã¯åçœããªããã°ãªããŸãã

以åã«CartfileãäœæããAlamofireãšSwiftyJSONã®ã©ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããå¿ èŠãããããäŒããããšãèŠããŠããŸããïŒ ããŠãããªããèŠãããšãã§ããããã«ãç§ã¯ããªãã«ééã£ãæ å ±ãäžããŸããã å€ãããŒãžã§ã³ã®Alamofireã䜿çšããããã«èšããŸããã

æã£ãŠã¯ãããŸããïŒ ããã¯æåã®æå³ã§è¡ãããŸããã ãããæ©äŒãšããŠèŠãŠãã ãã...ã¯ããäŸåé¢ä¿ãæŽæ°ããæ¹æ³ãåŠã¶æ©äŒã§ãã ããã¯èŽãç©ã§ãã

Cartfileãã¡ã€ã«ãå床éããŸãã ãããžã§ã¯ããã£ã¬ã¯ããªããããããã¿ãŒããã«ã§è¡ããŸãïŒ
open -a Xcode Cartfile
Alamofireã®è¡ã次ã®ããã«å€æŽããŸãã
github "Alamofire/Alamofire" ~> 2.0
ããã¯ã 2.0ãšäºææ§ã®ããAlamofireã®ä»»æã®ããŒãžã§ã³ã䜿çšã§ããããšãæå³ããããã 3.0ãŸã§ã®ããŒãžã§ã³ïŒãã ã3.0ãå«ãŸãªãïŒã䜿çšã§ããŸãã
Carthageã䜿çšããŠäŸåé¢ä¿ãè¿œå ããŸããäºææ§ã®åé¡ãèæ ®ãã察象ã®ããŒãžã§ã³ãå¶éããããšããå§ãããŸãã ããã«ãããAPIãšæ©èœã®æ£ç¢ºãªç¶æ ãç¥ãããšãã§ããŸãã
ããšãã°ãäŸåé¢ä¿ã®ããŒãžã§ã³2.0ã«ã¯ãã¢ããªã±ãŒã·ã§ã³APIãžã®å€æŽãå«ãŸããå ŽåããããŸãããããžã§ã¯ããããŒãžã§ã³1.4ã«äœæããå Žåãããããã¢ããªã±ãŒã·ã§ã³APIã«èªåçã«ã¢ããã°ã¬ãŒãããããªãã§ãããã
Cartfileãã¡ã€ã«ãä¿åããŠéãã 端æ«ã«æ»ããŸãã å¥ã®æŽæ°ãå®è¡ããŸãã
carthage update --platform iOS
Carthageã¯ãå¿ èŠã«å¿ããŠãåäŸåé¢ä¿ã®æ°ããããŒãžã§ã³ã確èªããããããã¢ã³ããŒãããŠäœæããŸãã 圌ã¯ææ°ããŒãžã§ã³ã®AlamofireãéžæããŠããããšãããããŸãã
ãããžã§ã¯ãã«ã¯Alamofireçšã«äœæããã.frameworkãžã®ãªã³ã¯ãæ¢ã«å«ãŸããŠãããããCarthageã¯ãã£ã¹ã¯äžã®åãå Žæã«æ°ããããŒãžã§ã³ãäœæããããããªã©ãã¯ã¹ããŠCarthageã«ä»»ããããšãã§ããŸãã ãããžã§ã¯ãã¯ãAlamofireã®ææ°ããŒãžã§ã³ãèªåçã«äœ¿çšããŸãïŒ
DuckDuckGoïŒ
AlamofireãšSwiftyJSONããããžã§ã¯ãã«è¿œå ããã®ã§ããããã䜿çšããŠæå³ãããšããã«æ€çŽ¢ã§ããŸãã æºåã¯ããïŒ
Xcodeã§DuckDuckGo.swiftãéããŸãã ãã¡ã€ã«ã®äžéšã§ãäŸåé¢ä¿ããšã«importã¹ããŒãã¡ã³ããè¿œå ããŸãã
import Alamofire import SwiftyJSON
次ã«ã次ã®ã¡ãœãããResultTypeã«ã2ã€ã®caseã¹ããŒãã¡ã³ããšã³ããªã®ããäžã«è¿œå ããŸãã
func parseDefinitionFromJSON(json: JSON) -> Definition { switch self { case .Answer: let heading = json["Heading"].stringValue let abstract = json["AbstractText"].stringValue let imageURL = NSURL(string: json["Image"].stringValue) return Definition(title: heading, description: abstract, imageURL: imageURL) case .Exclusive: let answer = json["Answer"].stringValue return Definition(title: "Answer", description: answer, imageURL: nil) } }
SwiftyJSONã䜿çšããŠJSONå¿çããå¿ èŠãªããŒã¿ãæšå®ããç»åã®ã¿ã€ãã«ã説æãURLãå«ãå®çŸ©ãäœæããŸãã
DuckDuckGo APIã¯ããŸããŸãªã¿ã€ãã®çµæãè¿ãããšãã§ããŸããããããã®2ã€ã®çãã¯ãå¿ èŠãªæŠå¿µã®ç°¡åãªå®çŸ©ãæäŸããAnswerãš ãèšç®ã«å¯Ÿããå æ¬çãªçããæäŸããExclusiveã§ãã
次ã«ããŸã DuckDuckGoã«ããéã«ã performSearchã®æ¢åã®å®çŸ©ïŒ_ïŒå®äº:)ã次ã®ããã«çœ®ãæããŸãã
func performSearch(searchTerm: String, completion: ((definition: Definition?) -> Void)) { // 1 let parameters: [String:AnyObject] = ["q": searchTerm, "format": "json", "pretty": 1, "no_html": 1, "skip_disambig": 1] // 2 Alamofire.request(.GET, "https://api.duckduckgo.com", parameters: parameters).responseJSON { _, _, result in // 3 if result.isFailure { completion(definition: nil) } // 4 if let jsonObject: AnyObject = result.value { let json = JSON(jsonObject) // 5 if let jsonType = json["Type"].string, resultType = ResultType(rawValue: jsonType) { // 6 let definition = resultType.parseDefinitionFromJSON(json) completion(definition: definition) } } } }
ããã«ã¯ã»ãšãã©ãªãã®ã§ããã¹ãŠãæŽçããŸãããã
- ãŸããDuckDuckGoã«éä¿¡ãããªãã·ã§ã³ã®ãªã¹ããäœæããŸãã ããã§æãéèŠãªã®ã¯ãæ€çŽ¢æ¡ä»¶èªäœãšãJSONã§å¿çããããã«WebãµãŒãã¹ã«æ瀺ãã圢åŒã§ãã
- 次ã«ãAlamofireã䜿çšããŠãªã¯ãšã¹ããå®è¡ããŸãã ãã®åŒã³åºãã¯ãäžèšã§äœæããããã©ã¡ãŒã¿ãŒãã£ã¯ã·ã§ããªã䜿çšããŠã Getãªã¯ãšã¹ãapi.duckduckgo.comãå®è¡ããŸãã
- å¿çãè¿ã£ãŠãããããã«ãèŠæ±ãæ©èœããªããªã£ããã©ããã確èªããŸãã ãããããªããæ©ãã«åºçºããŸãã
- å¿ èŠã«å¿ããŠãJSONå¿çãªããžã§ã¯ãããã€ã³ãããŠéèŠã§ããããšã確èªããããã䜿çšããŠJSON SwiftyJSONæ§é ãäœæããŸãã
- 次ã«ã JSONããTypeããŒã®å€ãååŸããããã䜿çšããŠDuckDuckGo.swiftã®æäžéšã§å®£èšãããŠããResultTypeåæãäœæããŸãã
- æåŸã«ãæäŸãããJSONãªããžã§ã¯ãããå®çŸ©ã解æããããã«çµæã¿ã€ããäŒããŸãã
æ³šïŒ skip_disambigãã©ã¡ãŒã¿ãŒããªãååšããã®ãçåã«æã£ãŠããå Žåã¯ãDuckDuckGoã«æ確ãªçµæãè¿ããªãããã«æ瀺ããŸãã
ææ§ãã®çµæã¯ããŠã£ãããã£ã¢ã«è¡šç€ºãããããŒãžãšäŒŒãŠããŸããæ ç»ä¿³åªãšããŠã®ã¯ãªã¹ã»ãšãŽã¡ã³ã¹ãè±åœã®ãã¬ãåžäŒè ãšããŠã®ã¯ãªã¹ã»ãšãŽã¡ã³ã¹ã匷çãšããŠã®ã¯ãªã¹ã»ãšãŽã¡ã³ã¹ãæå³ããŸãããïŒ
skip_disambigã¯ã APIãæãå¯èœæ§ã®é«ãçµæãåã«éžæããŠè¿ãããšãæå³ããŸãã
ãããžã§ã¯ããã³ã³ãã€ã«ããŠå®è¡ããŸãïŒ ã¢ããªã±ãŒã·ã§ã³ãèµ·åããããæ€çŽ¢ããŒã«æ€çŽ¢æ¡ä»¶ãå ¥åããŸãããããã¯ããŸãã¯ãã«ã«ã¿ãŽããå ¥åããŠã¿ãŠãã ããã ãã¹ãŠãæ£åžžã«æ©èœããå Žåã次ã®ç»é¢ã«å®çŸ©ã衚瀺ãããŸãã

ããããäœããæ¬ ããŠããŸãïŒæç»ïŒ ã¢ãã«ãäœã§ããããèªãããšã¯äžã€ã®ããšã§ããã誰ããããªã«èªãã®ã§ããããïŒ ãããŠãæç»ã¯å šãå¥ã®åé¡ã§ã-ããŠãç§ã¯ãããã®æ±ºãŸãæå¥ããããªããæããŸã-ããªãã¯ç§ã®æå³ãç¥ã£ãŠããŸãã
ãšã«ããã誰ãã¢ãã«ã®åçãèŠãããªãã®ã§ããïŒ ãããšããæšã·ãŒãºã³ã®ãããªåç«ã§ããïŒ
DefinitionViewController.swiftãéããäžéšã®æ¢åã®UIKitã€ã³ããŒãã®ããäžã«ã€ã³ããŒãAlamofireãè¿œå ããŸãã
import Alamofire
次ã«ã viewDidLoadïŒïŒã¡ãœããã®äžéšã§ã次ãè¿œå ããŸã
if let imageURL = definition.imageURL { Alamofire.request(.GET, imageURL).response { _, _, data, _ in self.activityIndicator.stopAnimating() if let data = data { let image = UIImage(data: data) self.imageView.image = image } } }
ãã®ã³ãŒãã¯ãç»åã1ã€ããå Žåã«å®çŸ©ç»åURLããæããã«ããã GETèŠæ±ãå®è¡ããŠç»åãååŸããŸãã ã¯ãšãªãããŒã¿ãæ£åžžã«è¿ããå Žåãããã䜿çšããŠç»åãäœæãããç»åãã¥ãŒã«è¡šç€ºãããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããæ€çŽ¢ããŸãã

次ã¯ã©ãïŒ
å®æãããããžã§ã¯ããããŠã³ããŒãã§ããŸã ã
ããã§ãšãããããŸããäŸåé¢ä¿ç®¡çã®åºæ¬ååãšCarthageèªäœã«ã€ããŠåŠã³ã Carthageã®çµéšãç©ãã§ããããžã§ã¯ãã«äŸåé¢ä¿ãè¿œå ããæ¹æ³ãåŠã³ããããã®äŸåé¢ä¿ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã䟿å©ã«ããŸããã
ãŸããä»åŸã®ãªãªãŒã¹ã§äŸåé¢ä¿ãæŽæ°ããæ¹æ³ãåŠã³ãŸããã
Carthageã«ã€ããŠè©³ããç¥ãããå Žåã¯ãæåã«Carthageã®READMEãšBuild Artifactsã®ããã¥ã¡ã³ãã調ã¹ãŠãã ããã
ãããžã§ã¯ãã®åµèšè ã®1人ã§ããJustin Spahr-Summersã¯ãCarthageã®Realm.ioã§ã ç¡æ æ²ã«åçŽãªäŸåé¢ä¿ç®¡ç ããšããã¿ã€ãã«ã®çŽ æŽãããã¬ããŒããäœæããŸããã ã
Carthageã«ã€ããŠã®ãã®èšäºããååã«åŠãã§ããã ããã°å¹žãã§ãã 質åãã³ã¡ã³ããããå Žåã¯ãã³ã¡ã³ãã§ãã£ã¹ã«ãã·ã§ã³ã«åå ããŠãã ããïŒ