Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS×î¼Ñʵ¼ù
 
×÷Õߣºlinxiangyu À´Ô´£º¼òÊé ·¢²¼ÓÚ£º 2015-04-17
  2262  次浏览      28
 

Ò»¡¢ÎªÊ²Ã´ÔĶÁ±¾Îĵµ

Ìø½øÁË iOS µÄ¿ÓÕæÊÇÂé·³¡£ÎÞÂÛÊÇ Swift »¹ÊÇ Objective-C£¬ ¶¼Ã»ÓÐÔÚÆäËûµØ·½¹ã·ºÊ¹Ó㬶øÇÒÕâ¸öƽ̨¶Ôÿ¸ö¶«Î÷¶¼¼¸ºõÓÐËü×Ô¼ºµÄÃüÃû·½Ê½£¬²¢ÇÒÁ¬ÒªÔÚÕæ»úÉϵ÷ÊÔ¶¼³äÂúÁË¿²¿À¡£ÎÞÂÛÄãÊǸոÕÈëÃÅ Cocoa »¹ÊÇÏë¾ÀÕý×Ô¼º¿ª·¢Ï°¹ßµÄ¿ª·¢Õߣ¬¶¼ÄÜ´Ó±¾Îĵµ»ñÒæ¡£²»¹ýÏÂÃæÐ´µÄ½ö½öÊǽ¨Ò飬ËùÒÔÈç¹ûÄãÓÐÒ»¸ö¸üºÃµÄ·½°¸£¬ÄǾÍÊÔÊÔ°É£¡

¶þ¡¢ÈëÃÅ

Xcode

Xcode ÊÇ´ó¶àÊý iOS ¿ª·¢ÕßµÄÑ¡Ôñ£¬²¢ÇÒÊÇ Apple Ψһ¹Ù·½Ö§³ÖµÄIDE¡£ÓÐһЩÆäËûµÄÑ¡Ôñ£¬±ÈÈç AppCode ÊÇ×îÓÐÃûµÄ£¬µ«Êdzý·ÇÄãÊǾ­Ñé·á¸»µÄ¿ª·¢Õߣ¬·ñÔò¾ÍʹÓà Xcode °É¡£²»Òª¹ÜËüµÄһЩСȱµãÀ²£¬ËüÏÖÔÚÒѾ­ÂùºÃÓÿ©¡£

Òª°²×° Xcode£¬Ö»ÐèÒªÏÂÔØ Mac App Store ÖÐµÄ Xcode¡£Ëü»áͬʱÏÂÔØ×îÐ嵀 SDK ºÍÄ£ÄâÆ÷£¬Í¬Ê±Äã¿ÉÒÔ´Ó Preferences > Downloads ÏÂÔØ¸ü¶àµÄÄÚÈÝ¡£

ÏîÄ¿³õʼ»¯

¿ªÊ¼iOS¿ª·¢µÄʱºò£¬Ò»¸ö³£¼ûµÄÎÊÌâÊÇÓôúÂëдËùÓÐµÄ view »¹ÊÇʹÓà Interface Builder£¨Storyboards »òÕß XIB £©¡£Á½ÖÖ·½°¸¶¼¾Ã¾­¿¼Á¿¡£µ«ÊÇ£¬ÓÐÏÂÃæ¼¸¸ö¿¼ÂÇ£º

ΪʲôʹÓôúÂ룿

Storyboard ÒòΪËüµÄ¸´Ô XML ½á¹¹ÈÝÒ×´øÀ´°æ±¾³åÍ»£¬ÕâÈôúÂëºÏ²¢±äµÃÀ§ÄÑ¡£

ÈÝÒ×ÓôúÂë½á¹¹»¯ÒÔ¼°¸´Óà view£¬ÈÃÄãµÄ´úÂë±äµÃ DRY¡£

ËùÓеÄÐÅÏ¢»ã¼¯Ò»´¦¡£ÔÚ Interface Builder ÀïÃæÄãÐèÒªµã»÷ËùÓеļì²éÆ÷À´Ñ°ÕÒÄãÒªÕҵĶ«Î÷¡£

ΪʲôÓà Storyboard£¿

ΪÁ˸üÉٵļ¼ÊõÒªÇó£¬Storyboard ʹÓÃÁËÒ»¸öºÜºÃµÄÖ±½Ó¹±Ï×ÓÚÏîÄ¿µÄ·½·¨£¬±ÈÈ磬ͨ¹ýµ÷ÕûÑÕÉ«»òÕß²¼¾ÖµÄ constraints¡£È»¶ø£¬ËüÒªÇóÒ»¸öÏîÄ¿ÒѾ­×öºÃÅäÖ㬲¢ÇÒ¿ª·¢ÕßÓÐһЩʱ¼äÕÆÎÕ»ù´¡

µ±Äã²»Óù¹½¨ÏîĿҲÄÜ¿´µ½±ä»¯µÄʱºò£¬¼¯³É¸ü¿ìÁË

ÔÚ Xcode6 ÀïÃæ£¬×Ô¶¨ÒåµÄÎÄ×ÖºÍ UI ÔªËØÔÚ storyboard ÀïÃæ¶¼¿ÉÒÔ¿ÉÊÓ»¯±íʾ£¬±ÈÄãÔÚ´úÂëÀïÃæÐ޸ĺöàÁË

´ÓiOS8¿ªÊ¼£¬Size Classes ÔÊÐíÄãÉè¼Æ²»Í¬ÀàÐÍÉ豸µÄÆÁÄ»£¬²»ÓÃÖØ¸´Ò»Ð©¹¤×÷

ºöÂÔÎļþ

µ±°ÑÏîÄ¿·ÅÈë°æ±¾¿ØÖÆÏµÍ³µÄʱºò£¬Ê×ÏÈÓ¦¸ÃÓÐÒ»¸öºÃµÄ .gitignore Îļþ¡£ÕâÑù£¬²»±ØÒªµÄÎļþ£¨Óû§ÉèÖã¬ÁÙʱÎļþÕâЩ£©¶¼²»»á·Å½øÄãµÄ²Ö¿âÀïÃæ¡£ÐÒÔ˵ÄÊÇ£¬Github ÒѾ­¸øÁËÎÒÃÇ Objective-C ºÍ Swift ÓïÑÔµÄÄ£°å

CocoaPods

Èç¹ûÄã¼Æ»®Ôö¼ÓÍⲿÒÀÀµ(±ÈÈ磬µÚÈý·½¿â)ÔÚÄãµÄÏîÄ¿ÖУ¬CocoaPods ÌṩÁËÒ»¸ö¿ì½ÝµÄ;¾¶£¬¾ÍÏñÕâÑù£º

sudo gem install cocoapods

Òª¿ªÊ¼Ê¹Ó㬽ö½öÐèÒªÔÚÄãµÄ iOS ÏîĿĿ¼ÏÂÔËÐУº

pod init

Ëü»á´´½¨Ò»¸ö Podfile£¬ »á¹ÜÀíÄãËùÓеÄÒÀÀµ£¬ÔÚ Podfile ÖмÓÈëÄãµÄÒÀÀµºó£¬ÔÊÐí

pod install

À´°²×°µÚÈý·½¿â²¢ÇÒ½«ËüÃÇ×÷Ϊ workspace µÄÒ»²¿·Ö£¬ÄãµÄ workspace Ò²»á°üº¬Äã×Ô¼ºµÄÏîÄ¿¡£ Ò»°ãÍÆ¼öÌá½»Äã×Ô¼ºµÄÏîÄ¿µÄÒÀÀµ£¬¶ø²»ÊÇÿ¸ö¿ª·¢ÕßÔÚÒ»¸ö checkoutÖ®ºóÔËÐÐ pod install ¡£

×¢ÒâÔÚÖ®ºó£¬ÄãÐèÒª´ò¿ª .xcworkspace ¶ø²»ÊÇ .xcproject£¬·ñÔòÄãµÄ´úÂë¾Í²»Äܱ»±àÒëÁË£¬ÃüÁ

pod update

»áÉý¼¶ËùÓÐµÄ pod µ½×îа汾£¬Äã¿ÉÒÔÓôóÁ¿ ·ûºÅ À´¶¨ÒåÄãÆÚÍûµÄ°æ±¾ÐèÇó¡£

Èý¡¢ÏîÄ¿½á¹¹

ΪÁË×é֯Ŀ¼ÀïÃæµÄÉϰٸöÔ´´úÂëÎļþ£¬×îºÃ¸ù¾ÝÄãµÄ¼Ü¹¹À´ÉèÖÃһЩÎļþ½á¹¹¡£±ÈÈ磬Äã¿ÉÒÔÓÃÕâÑùµÄ£º

©À©¤ Models
©À©¤ Views
©À©¤ Controllers
©À©¤ Stores
©À©¤ Helpers

Ê×ÏÈ£¬½«ËûÃÇ´´½¨Îª Group£¨»ÆÉ«µÄĿ¼£©£¬Óà Xcode µÄÏîÄ¿µ¼º½ÀïÃæµÄÄãµÄÏîÄ¿ÖС£È»ºó¶Ôÿ¸öÏîÄ¿ÀïµÄÎļþ£¬½«ËüôÁ¬½Óµ½ÕæÊµµÄÎļþĿ¼ ¡ª¡ª ͨ¹ý´ò¿ªËüÓұߵÄÎļþ¼ì²éÆ÷£¬µã»÷ССµÄĿ¼ͼ±ê£¬ÔÚÄãµÄÏîĿĿ¼Ï´´½¨Ò»¸öºÍ group ͬÃûµÄ×ÓĿ¼¡£

±¾µØ»¯

Ò»¿ªÊ¼¾ÍÓ¦¸Ã°ÑËùÓеÄÏÔʾ¸øÓû§µÄ×Ö·û´®·Å½ø±¾µØ»¯Îļþ¡£ÕâÑù²»½ö½öΪÁË·­Òë·½±ã£¬Í¬Ê±Ò²±ãÓÚ²éÕÒÓû§¿´¼ûµÄÎı¾¡£Äã¿ÉÒÔÔÚ build Scheme ÖмÓÈëÒ»¸öÆô¶¯²ÎÊýÀ´Ö¸¶¨Ìض¨µÄÓïÑÔ

-AppleLanguages (Finnish)

¶ÔÓÚ¸ü¸´Ôӵķ­ÒëÎÊÌ⣬±ÈÈ縴Êý£¨±ÈÈç "1 person" ºÍ "3 people"£©£¬ÄãÓ¦¸ÃʹÓà .stringsdict format ¶ø²»ÊÇÒ»¸öÆÕͨµÄ localizable.strings Îļþ¡£ÔÚÓÐÁËÕâ¸öÇ¿´óµÄ¹¤¾ßÀ´´¦Àí±ÈÈç "one", some", "few" ºÍ "many" µÄÇé¿ö¡£ µ±´¦Àí¶íÂÞ˹ÓïºÍ°¢À­²®ÓïµÄʱºò£¬Äã¾Í²»Óü±µÃ×¥¶úÄÓÈùÁË¡£

¹ØÓÚ±¾µØ»¯µÄ¸ü¶àÐÅÏ¢£¬¿´ 2012Äê 2Ô嵀 Helsink iOS »áÒéµÄ »ÃµÆÆ¬£¬´ó²¿·ÖÄÚÈݶÔÏÖÔÚÒ²ÊÇÊÊÓõġ£

³£Á¿

´´½¨±» prefix header ÒýÈëµÄÒ»¸ö Constants.h Îļþ¡£

²»ÒªÓú궨Ò壨Óà #define£©£¬ÓÃʵ¼ÊµÄ³£Á¿¶¨Òå

static CGFloat const XYZBrandingFontSizeSmall = 12.0f;
static NSString * const XYZAwesomenessDeliveredNotificationName = @"foo";

³£Á¿ÀàÐͰ²È«£¬²¢ÇÒÓиüÃ÷È·µÄ×÷ÓÃÓò£¨²¢²»ÊÇÔÚËùÓÐûÓб»ÒýÈëµÄÎļþÖÐÄÜʹÓã©¡£²»Äܱ»Öض¨Ò壬²¢ÇÒ¿ÉÒÔÔÚµ÷ÊÔÆ÷ÖÐʹÓá£

·ÖÖ§Ä£ÐÍ

ÌØ±ðÊÇ·Ö·¢ÄãµÄ app µÄʱºò£¨ÈçÌá½»µ½ App Store£©£¬×îºÃ°Ñ·ÖÖ§ÓÃÌØ±ðµÄ tag Çø·Ö¡£Í¬Ê±£¬ÐÂÌØÐԵĿª·¢£¬»áÒýÈëºÜ¶à commit µÄ£¬Ò²Ó¦¸ÃÔÚ¶ÀÁ¢µÄ·ÖÖ§ÉÏÌá½»¡£git-flow ÊÇÒ»¸ö°ïÖúÄã×ñ´ÓÕâ¸öÔ¼¶¨µÄ¹¤¾ß¡£Ëü¼òµ¥µØ°ü×°ÁË gitµÄ·ÖÖ§ºÍtagµÄÃüÁ°ïÖúά»¤Ò»¸öÕýÈ·µÄ·ÖÖ§½á¹¹¡£ËùÓеĿª·¢·ÖÖ§£¨±ÈÈç develop£©£¬ ¹ØÓÚ app°æ±¾µÄtag·ÖÖ§ÒÔ¼°Ìá½»µ½ master·ÖÖ§µÄ£º

git flow release finish

ËÄ¡¢³£Óÿâ

×ܵÃÀ´Ëµ£¬À´°ÑÒ»¸öµÚÈý·½¿â¼ÓÈëµ½ÄãµÄÏîÄ¿ÖÐÐèÒªÉ÷ÖØ¿¼ÂÇ¡£È·Êµ£¬Ò»¸öÁéÇɵĿâ»òÐíÄܰïÖúÄã½â¾öÏÖÔÚµÄÎÊÌ⣬µ«ÊÇ¿ÉÄÜÔÚÖ®ºóÏÝÈëά»¤µÄجÃΣ¬±ÈÈçÔÚÏÂÒ»¸öϵͳ°æ±¾¸Ä±äһЩ¶«Î÷Ö®ºó£¬»òÕßÒ»¸öµÚÈý·½¿âµÄ³¡¾°±ä³ÉÁ˹ٷ½µÄAPI¡£²»¹ýÔÚÒ»¸öÁ¼ºÃµÄÉè¼ÆµÄ´úÂëÖУ¬Çл»ÊµÏÖÊǺÜÇáËɵġ£¾¡Á¿¿¼ÂÇÓà Apple µÄ¹ã·º£¨¶øÇÒÓÅÐãµÄ£©¿ò¼Ü°É¡«

Õâ¸öС½Ú¾¡Á¿±£³Ö¼ô¶Ì¡£¿âµÄÌØÐÔÊÇΪÁ˼õÉÙÄ£°å´úÂ루±ÈÈç AutoLayout£©»òÕß½â¾ö¸´ÔÓµÄÐèÒªºÜ¶à²âÊÔµÄÎÊÌ⣬±ÈÈçÈÕÆÚ¼ÆËã¡£µ±ÄãÔÚ iOS Öиü¼ÓרҵµÄʱºò£¬ÍÚ¾òÕâÀïµÄÔ´´úÂ룬ͨ¹ýËüÃǵײãµÄ Apple ¿ò¼ÜÀ´ÈÏʶËûÃÇ£¬Äã»á·¢ÏÖÕâЩ¿ÉÒÔ×ö´óÁ¿¹¤×÷¡£

AFNetworking

99.95% µÄ iOS¿ª·¢ÕßʹÓÃÕâ¸öÍøÂç¿â£¬µ± NSURLSession ×Ô¼º±¾ÉíÒ²·Ç³£ÍêÉÆµÄʱºò£¬ AFNetworking ÈÔÈ»ÄÜÆ¾½èºÜ¶à app ÐèÒªµÄ¶ÓÁÐÇëÇó¹ÜÀí¹¦ÄÜÁ¢×ãÓÚ²»°ÜÖ®µØ¡£

DateTools ÈÕÆÚ¹¤¾ß

×ܵÃÀ´Ëµ£¬²»Òª×Ô¼ºÐ´ÈÕÆÚ¼ÆËã¡£ÐÒÔ˵ÄÊÇ£¬ÓÐÒ»¸ö DateTools ÊÇ MIT ЭÒéµÄ£¬¶øÇÒ¾­¹ý³¹µ×²âÊԵģ¬Äã¿ÉÒÔ·ÅÐĵÄÔÚÐèÒªÓÃÈÕÆÚµÄʱºòʹÓÃËü¡£

Auto Layout ¿â

Èç¹ûÄã¸üϲ»¶ÔÚ´úÂëÀïÃæÐ´½çÃæ£¬Äã»áÓùý Apple ÄÑÓÃµÄ 'NSLayoutConstraint' µÄ¹¤³§»òÕß Visual Format Language ¡£Ç°ÕߺÜÂÞ࣬ºóÕß»ùÓÚ×Ö·û´®£¬²»ÀûÓÚ±àÒëÆ÷¼ì²é¡£

Masonry ͨ¹ýËüÃÇ×Ô¼ºµÄ DSL À´È¡´ú³£Á¿£¬ Swift ÖÐÒ»¸öÀàËÆµÄ¿âÊÇ Cartography£¬ËüÀûÓÃÁËÓïÑԵķḻµÄ²Ù×÷·ûÖØÔØÌØÐÔ¡£Èç¹û¸ü¼Ó±£Êصϰ£¬FLKAutoLayout ÌṩÁËÒ»¸ö¸É¾»µ«ÊÇûÓÐÌ«¶àħ·¨µÄÔ­Éú API °ü×°¡£

Architecture ¼Ü¹¹

1.Model-View-Controller-Store (MVCS)

ÕâÊÇ Apple ĬÈϵļܹ¹£¨MVC£©£¬Í¨¹ýÀ©Õ¹Ò»±íʾ Model ʵÀýµÄ´æ´¢²ãÒÔ¼°´¦ÀíÍøÂ磬»º´æµÈÄÚÈÝ¡£

ÿһ¸ö´æ´¢Í¨¹ý RACSignals »òÕß void ·µ»ØÖµµÄ×Ô¶¨Òå block ·½·¨À´·µ»Ø¡£

2.Model-View-ViewModel (MVVM)

ͨ¹ý "massive view controllers": MVVM ÈÏΪ UIViewController ×ÓÀàÊÇvuewµÄÒ»²¿·Ö£¬²¢ÇÒ±£³Ö¾«¼ò£¬Í¨¹ýÔÚ viewmodelÀïÃæÎ¬³Ö״̬¡£

¶ÔÓÚ Cocoa ¿ª·¢ÕßÊǷdz£ÐµĸÅÄµ«ÊÇ »ñµÃ ÍÆ¶¯

3.View-Interactor-Presenter-Entity-Routing (VIPER)

ÖµµÃÔÚ´óÐÍÏîÄ¿ÖÐÒ»¿´µÄ¼Ü¹¹£¬ÔÚ MVVM ¶¼ÏԵø´ÔÓ£¬¶øÇÒÐèÒª¹Ø×¢²âÊÔµÄʱºò¡£

Î塢ʼþģʽ

ÕâÀïÓÐһЩ֪ͨÆäËû¶ÔÏóµÄ³£Ó÷½·¨£º

Delegation £¨Î¯ÍУ©: _(Ò»¶ÔÒ»)_ Apple ¾­³£ÓÃËü£¨»òÕß˵£¬Ì«¶àÁË£©¡£ÓÃËüÀ´Ö´Ðлص÷£¬±ÈÈ磬 Model View ×öÒ»¸ö»Øµ÷

Callback blocks £¨»Øµ÷´úÂë¿é£©: _(Ò»¶ÔÒ»)_ ¿ÉÒÔ¸ü¼Ó½âñ¿ÉÒÔά»¤ÀàËÆµÄÏà¹Ø´úÂë¶Î¡£Í¬Ê±ÔÚÓкܶà sender µÄʱºò±ÈίÍÐÓиüºÃµÄÀ©Õ¹ÐÔ¡£

Notification Center £¨Í¨Öª£©: _(Ò»¶Ô¶à)_ ×î³£ÓõĶÔÏóÀ´ÏòµÚÒ»¸ö¹Û²ìÕß·¢ËÍʼþµÄ·½·¨¡£·Ç³£½âñîºÏ - ֪ͨÉõÖÁ¿ÉÒÔÈ«¾ÖµØ½øÐй۲죬¶ø²»ÓÃÒýÓÃÅÉ·¢¶ÔÏó

Key-Value Observing (KVO£¬¼üÖµ±àÂë): _(Ò»¶Ô¶à) ²»ÐèÒª¹Û²ìÕßÀ´Ã÷È··¢Ë͵Äʱ¼ä£¬¾ÍÏñ _Key-Value Coding (KVC) ·ûºÏ¹Û²ìµÄ¼ü£¨ÊôÐÔ£©¡£Í¨³£²»ÍƼöʹÓã¬ÒòΪËû²»×ÔÈ»µÄÌØÐÔÒÔ¼°·±ËöµÄAPI¡£

Signals£¨Ðźţ©: _(Ò»¶Ô¶à)_ ReactiveCocoa µÄºËÐÄ, ÔÊÐíÁ´½ÓºÍ×éºÏÄãµÄÄÚÈÝ, ÌṩÁË·ÀÖ¹ callback hell µÄÒ»¸ö·½·¨¡£

Models

±£³ÖÄãµÄ model ÊDz»¿É±äµÄ£¬ÒÔ¼°ÓÃËûÃÇÀ´¸Ä±äÔ¶³ÌµÄ API µÄÓïÒåÒÔ¼°ÀàÐÍ¡£Github µÄ Mantle ÊÇÒ»¸öºÃµÄÑ¡Ôñ

Views

µ±Óà Auto Layout ²¼¾ÖÄãµÄ view µÄʱºò£¬È·±£ÔÚÄ㸸ÀàÖмÓÈëÁËÏÂÃæµÄ´úÂ룺

+ (BOOL)requiresConstraintBasedLayout
{
return YES;
}

·ñÔòµ±ÏµÍ³Ã»Óе÷Óà -updateConstraints µÄʱºò£¬Äã¿ÉÄÜ»áÓöµ½Ææ¹ÖµÄ bug¡£

Controllers

½¨ÒéʹÓÃÒÀÀµ×¢È룬±ÈÈ磺´«µÝÈκÎÐèÒªµÄ¶ÔÏó×÷Ϊ²ÎÊý£¬¶ø²»ÊÇÔÚÒ»¸öµ¥ÀýÖб£³ÖËùÓеÄ״̬¡£ºóÒ»ÖÖ·½·¨½ö½öÔÚ״̬ÊÇ ÕæµÄ È«¾ÖµÄʱºòÊÊÓá£

+ [[FooDetailsViewController alloc] initWithFoo:(Foo  *)foo];

Áù¡¢ÍøÂç

´«Í³µÄ·½Ê½£ºÊ¹Óûص÷ block

// GigStore.h

typedef void (^FetchGigsBlock)(NSArray *gigs, NSError *error);

- (void)fetchGigsForArtist:(Artist *)artist completion:(FetchGigsBlock)completion


// GigsViewController.m

[[GigStore sharedStore] fetchGigsForArtist:artist completion:^(NSArray *gigs, NSError *error) {
if (!error) {
// Do something with gigs
}
else {
// :(
}
];

ÕâÑùÔËÐУ¬µ«ÊÇÈç¹ûÄãÓжà¸ö×éºÏµÄÍøÂçÇëÇóµÄʱºò£¬¾Í»á½øÈë»Øµ÷ǶÌ׵ĵØÓü¡£

Reactive µÄ·½·¨£º ʹÓà RAC ÐźÅ

Èç¹ûÄã·¢ÏÖÒѾ­ÏÝÈëÁ˻ص÷µÄµØÓü£¬¿´¿´ ReactiveCocoa (RAC) °É£¬ËüÊÇÒ»¸öÍòÄܶøÇҶ๦ÄܵĿ⣬Äܸıä´ó¼Òд Õû¸ö app µÄ·½·¨£¬µ«ÊÇÄã¿ÉÒÔÔÚËüÊÊÓõĵط½±£ÊصØÊ¹ÓÃËü¡£

ÔÚ Teehan+Lax ºÍ NSHipster ÉÏÃæÓÐһЩ¹ØÓÚ RAC (and FRP in general) ÒÔ¼°º¯Êýʽ±à³ÌµÄ¸ÅÄîµÄÓÅÐã½éÉÜ¡£

// GigStore.h

- (RACSignal *)gigsForArtist:(Artist *)artist;


// GigsViewController.m

[[GigStore sharedStore] gigsForArtist:artist]
subscribeNext:^(NSArray *gigs) {
// Do something with gigs
} error:^(NSError *error) {
// :(
}
];

ËüÔÊÐíͨ¹ýÐÅºÅºÍÆäËûÐźŵĽáºÏ£¬ÔÚչʾËüÃÇ֮ǰ×öһЩ¸Ä±ä¡£

Æß¡¢Assets ×ÊÔ´

Asset catalogs ÊǹÜÀíÄãËùÓÐÏîÄ¿¿ÉÊÓ»¯×ÊÔ´µÄ×îºÃ·½Ê½£¬ËüÃÇ¿ÉÒÔͬʹÜÀíͨÓõÄÒÔ¼°É豸Ïà¹ØµÄiPhone 4-inch, iPhone Retina, iPad,µÈ)×ÊÔ´£¬²¢ÇÒ»á×Ô¶¯Í¨¹ýËüÃǵÄÃû×Ö·Ö×é¡£¸æËßÄãµÄÉè¼ÆÊ¦ÈçºÎÌí¼ÓËüÃÇ£¨XcodeÓÐÄÚÖÃµÄ Git ¿Í»§¶Ë£©¿ÉÒÔ½ÚÊ¡ºÜ¶àʱ¼ä£¬·ñÔòÄã»á»°ºÜ¶àʱ¼äÀ´ÔÚ´ÓÓʼþ»òÕ߯äËûÇþµÀ¸´ÖƵ½´úÂë¿âÀïÃæ¡£Ëü¿ÉÒÔÈÃÉè¼ÆÊ¦ÂíÉϳ¢ÊÔ×ÊÔ´¸Ä±äµÄÑù×Ó£¬²¢ÇÒ·´¸´ÊµÑé¡£

Using Bitmap Images ʹÓÃλͼ

Asset catalogs ½ö½ö±©Â¶ÁËͼƬµÄÃû³Æ£¬Í¼Æ¬¼¯ÀïÃæµÄ³éÏóµÄÃû×Ö¡£Õâ¿ÉÒÔ±ÜÃâ×ÊÔ´Ãû×ֵijåÍ»£¬¾ÍÏñ button_large@2x.png µÄÎļþµÄÃüÃû¿Õ¼äÔÚËüµÄͼƬ¼¯ÀïÃæ¡£×ñÊØÒ»Ð©ÃüÃû¹æÔò¿ÉÒÔÈÃÉú»î¸üÃÀºÃ£º

IconCheckmarkHighlighted.png // Universal, non-Retina
IconCheckmarkHighlighted@2x.png // Universal, Retina
IconCheckmarkHighlighted~iphone.png // iPhone, non-Retina
IconCheckmarkHighlighted@2x~iphone.png // iPhone, Retina
IconCheckmarkHighlighted-568h@2x~iphone.png // iPhone, Retina, 4-inch
IconCheckmarkHighlighted~ipad.png // iPad, non-Retina
IconCheckmarkHighlighted@2x~ipad.png // iPad, Retina

ÐÞÊκó׺ -568h, @2x, ~iphone and ~ipad ÊDz»±ØÒªµÄ£¬µ«ÊÇÓÐËûÃÇÔÚÎļþÀïÃæ£¬µ±°ÑÎļþÍϽøÈ¥µÄʱºò£¬Xcode»áÕýÈ·µØ´¦ÖÃËüÃÇ¡£Õâ±ÜÃ⸳ֵ´íÎó¡£

ʹÓÃÏòÁ¿Í¼

Äã¿ÉÒÔÓÃÉè¼ÆÊ¦Ô­Ê¼µÄ vector graphics (PDFs) ¼ÓÈëµ½ asset catalogs£¬Xcode¿ÉÒÔ×Ô¶¯µØ¸ù¾ÝËüÃÇÉú³Éλͼ¡£Õâ¼õÉÙÁËÄãµÄ¹¤³ÌµÄ¸´ÔÓÐÔ£¨¹ÜÀí¸üÉÙµÄÎļþ£©¡£

°Ë¡¢´úÂë·ç¸ñ

̟̞

¾¡¹ÜÃüÃûÔ¼¶¨ºÜ³¤£¬µ«ÊÇAppleÒ»Èç¼ÈÍùµØÔÚ APIÖÐ ×ñÊØÁËÃüÃûÔ­Ôò¡£

ÕâÀïÓÐһЩÄãÓ¦¸ÃʹÓõĻù±¾Ô­Ôò£º

Ò»¸ö·½·¨Óà ¶¯´Ê ¿ªÍ·µÄ±íʾËü×öÁËһЩ¸±×÷Ó㬵«ÊDz»»á·µ»ØÈκζ«Î÷£º

- (void)loadView;

- (void)startAnimating;

ÈκÎÒÔ Ãû´Ê ¿ªÍ·µÄ·½·¨£¬Ã»Óи±×÷ÓöøÇÒ·µ»ØÁËËüÖ¸µÄ¶ÔÏó£º

- (UINavigationItem *)navigationItem;

+ (UILabel *)labelWithText:(NSString *)text;

¾¡Á¿·ÖÀëÁ½Õߣ¬±ÈÈ磬²»ÒªÔÚ²Ù×÷Êý¾ÝµÄʱºò²úÉú¸±×÷Ó㬷´Ö®ÒàÈ»¡£Õâ»áÈÃÄãµÄ¸±×÷Óðüº¬µ½´úÂë¸üСµÄϸ·ÖÁ£¶ÈÀïÃæ£¬Èõ÷ÊÔ±äµÃ·Ç³£À§ÄÑ¡£

½á¹¹

Pragma marks ÊǰÑÄã´úÂë·Ö×éµÄÒ»¸öºÃ·½·¨£¬ÌرðÊÇÔÚ view ControllerÀï¡£ÏÂÃæµÄ½á¹¹¿ÉÒÔÊÊÓÃÓÚ¾ø´ó¶àÊý view ControllerµÄ¹¤×÷£º

#import "SomeModel.h"
#import "SomeView.h"
#import "SomeController.h"
#import "SomeStore.h"
#import "SomeHelper.h"
#import static NSString * const XYZFooStringConstant = @"FoobarConstant";
static CGFloat const XYZFooFloatConstant = 1234.5;

@interface XYZFooViewController () @property (nonatomic, copy, readonly) Foo *foo;

@end

@implementation XYZFooViewController

#pragma mark - Lifecycle

- (instancetype)initWithFoo:(Foo *)foo;
- (void)dealloc;

#pragma mark - View Lifecycle

- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;

#pragma mark - Layout

- (void)makeViewConstraints;

#pragma mark - Public Interface

- (void)startFooing;
- (void)stopFooing;

#pragma mark - User Interaction

- (void)foobarButtonTapped;

#pragma mark - XYZFoobarDelegate

- (void)foobar:(Foobar *)foobar didSomethingWithFoo:(Foo *)foo;

#pragma mark - Internal Helpers

- (NSString *)displayNameForFoo:(Foo *)foo;

@end

×îÖØÒªµÄÒ»µãÊÇÔÚÄãÏîÄ¿µÄÀàÖб£³ÖÒ»ÖÂÐÔ

ÆäËû·ç¸ñÖ¸ÄÏ

ÎÒÃǹ«Ë¾Ã»ÓÐÈκι«Ë¾¼¶±ðµÄ´úÂë·ç¸ñÖ¸ÄÏ£¬Ïêϸ¿´¿´ÆäËû¿ª·¢ÕßµÄ Objective-C ·ç¸ñÖ¸ÄϺÜÓÐÓ㬼´Ê¹Ò»Ð©ÄÚÈÝÊǹ«Ë¾Ïà¹ØµÄ»òÕß¹ýÓÚ¼¤½øÁË¡£

GitHub
Google
The New York Times
Ray Wenderlich
Sam Soffes
Luke Redpath

¾Å¡¢Õï¶Ï

±àÒ뾯¸æ

ÍÆ¼öÄ㾡¿ÉÄܶà´ò¿ª±àÒ뾯¸æ£¬²¢ÇÒÏñ¶Ô´ý´íÎóÒ»Ñù¶Ô´ý±àÒ뾯¸æ¡£ÍƼö Õâ¸öPPT¡£Õâ¸ö»ÃµÆÆ¬¸²¸ÇÁËÈçºÎÔÚÌØ¶¨Îļþ£¬»òÕßÌØ±ð´úÂë¶ÎÀïÃæÏû³ýÏà¹Ø¾¯¸æµÄÄÚÈÝ¡£

¼òµ¥µÄÀ´Ëµ£¬ÖÁÉÙÐèÒªÔÚ _¡°Other Warning Flags¡± ±àÒëÉèÖÃÀïÃæ¶¨ÒåÏÂÃæµÄÖµ£º

1.-Wall _(Ôö¼ÓºÜ¶àµÄ¾¯¸æ)_

2.-Wextra _(Ôö¼Ó¸ü¶àµÄ¾¯¸æ)_

ͬʱ´ò¿ª ¡°Treat warnings as errors¡±

Clang ¾²Ì¬·ÖÎö

Clang ±àÒëÆ÷£¨XcodeʹÓõģ©ÓÐÒ»¸ö ¾²Ì¬·ÖÎöÆ÷ À´½øÐÐÄãµÄ´úÂë¿ØÖÆºÍÊý¾ÝÁ÷µÄ·ÖÎö£¬À´¼ì²â±àÒëÆ÷²»Äܼì²âµÄÐí¶à´íÎó¡£

Äã¿ÉÒÔͨ¹ýÔÚ Xcode ÀïÃæÊÖ¶¯ÔËÐÐ Product ¡ú Analyze ²Ëµ¥ÏîÀ´ÊÖ¶¯Ö´ÐдúÂë·ÖÎö

·ÖÎöÆ÷¿ÉÒÔÓÃdz»òÕßÉîµÄģʽÔÊÐí£¬ºóÕ߸ü¼ÓÂý£¬µ«ÊÇ¿ÉÒԴӿ纯ÊýµÄ¿ØÖÆÁ÷ºÍÊý¾ÝÁ÷ÉÏ·ÖÎö¸ü¶àÎÊÌâ

ÍÆ¼ö£º

´ò¿ª ËùÓÐ ·ÖÎöÆ÷¼ì²é (ͨ¹ýÔÚ building setting Öдò¿ªËùÓÐ ¡°Static Analyzer¡± Ñ¡Ïî)

ÔÚ release µÄ±àÒëÉèÖÃÀïÃæ´ò¿ª ¡°Analyze during ¡®Build¡¯¡± À´È÷ÖÎöÆ÷×Ô¶¯ÔÚ·¢²¼µÄ°æ±¾¹¹½¨µÄʱºòÔÊÐí¡£(ÕâÑùÄã¾Í²»ÐèÒª¼ÇסҪÊÖ¶¯ÔËÐÐÁË)

°Ñ ¡°Mode of Analysis for ¡®Analyze¡¯¡± ÉèÖÃΪ Shallow (faster)

°Ñ ¡°Mode of Analysis for ¡®Build¡¯¡± ÉèÖÃΪ to Deep

Faux Pas

ÎÒÃÇ×Ô¼ºµÄAli Rantakari ´´½¨µÄ£¬Faux Pas ÊÇÒ»¸ö¼«¼ÑµÄ¾²Ì¬´íÎó¼ì²â¹¤¾ß£¬Ëü·ÖÎöÄãµÄ´úÂë²¢ÇÒÕÒ³öÄÇЩÄã×Ô¼ºÉõÖÁ¶¼Ã»·¢ÏÖµÄÎÊÌâ¡£ÔÚÌá½»ÄãµÄ App µ½Ó¦ÓÃÉ̵êǰÓÃËü°É£¡

µ÷ÊÔ

µ±ÄãµÄ App ±ÀÀ£µÄʱºò£¬Xcode ²»»áĬÈϽøÈëµ½µ÷ÊÔÆ÷ÀïÃæ¡£ÎªÁ˵÷ÊÔ£¬ÄãÐèÒªÔö¼ÓÒ»¸öÒì³£¶Ïµã£¨ÔÚ Xcode µÄ Debug µ¼º½Öе㠡°+¡±£©£¬À´ÔÚÒì³£·¢ÉúµÄʱºòÍ˳öÖ´ÐС£ÔںܶàÇé¿öÏ£¬ÄãÐèÒª¿´¿´´¥·¢ÕâЩÒì³£µÄ´úÂë¡£Ëü»á²¶×½ÈκÎÒì³££¬¼´Ê¹ÊÇÒѾ­´¦ÀíµÄ¡£Èç¹û Xcode ÔÚ Ò»¸öµÚÈý·½¿âÀïÃæÖжÏÖ´ÐУ¬±ÈÈ磬Äã¿ÉÄÜÐèҪͨ¹ýÑ¡Ôñ Edit Breakpoint ²¢ÇÒÉèÖà Exception Ϊ Objective-C.¡£

¶ÔÓÚÊÓͼ debug£¬ Reveal ºÍ Spark Inspector ÕâÁ½¸öÇ¿ÓÐÁ¦µÄ¿ÉÊÓ»¯¼ì²é¹¤¾ß¿ÉÒÔ°ïÄãʡϺܶàʱ¼ä£¬ÌرðÊÇÔÚÄãʹÓà Auto Layout ²¢ÇÒÏ£Íû¶¨Î»³öÎÊÌâ»òÕßÒç³öÆÁÄ»µÄÊÓͼµÄʱºò¡£Xcode ÌṩÁËÃâ·ÑµÄÀàËÆ¹¦ÄÜ£¬µ«ÊÇÖ»ÄÜÊÊÓÃÓÚ iOS 8+ ²¢ÇÒ²»ÄÇôºÃÓá£

·ÖÎö

Xcode ÓÐÒ»¸ö½Ð Instruments µÄ·ÖÎö¹¤¾ß£¬Ëü°üÀ¨ÁË

Ðí¶à·ÖÎöÄڴ棬CPU£¬ÍøÂçͨѶ£¬Í¼ÐÎÒÔ¼°¸ü¶àµÄ¹¤¾ß£¬ËüÓе㸴Ôӵ쬵«ÊÇËüµÄ×·×ÙÄÚ´æÐ¹Â©µÄʱºò»¹ÊÇÂùÖ±¹ÛµÄ¡£Ö»ÐèÒªÔÚ Xcode ÖÐ Ñ¡Ôñ Product > Profile£¬Ñ¡Ôñ Allocations£¬ µã»÷ Record °´Å¥²¢ÇÒÓÃһЩÓÐÓõÄ×Ö·û´®¹ýÂËÉêÇë¿Õ¼äµÄÐÅÏ¢£¬±ÈÈçÄã×Ô¼ºµÄappµÄÀàÃû¡£Ëü»áÔڹ̶¨µÄÁÐÖÐͳ¼Æ£¬²¢ÇÒ¸æËßÄãÿ¸ö¶ÔÏóÓжàÉÙʵÀý¡£µ½µ×ÊÇʲôÀàÒ»Ö±Ôö¼ÓʵÀýµ¼ÖÂÄÚ´æÐ¹Â©¡£

Instruments Ò²ÓÐ×Ô¶¯»¯µÄ¹¤¾ßÀ´½øÐÐÂ¼ÖÆ²¢ÇÒÔËÐÐUI½»»¥ÒÔ¼°JavaScriptÎļþ¡£UI Auto Monkey ÊÇÒ»¸ö×Ô¶¯»¯Ëæ»úµã»÷¡¢»¬¶¯ÒÔ¼°ÐýתÄãµÄappµÄ½Å±¾£¬ËûÔÚѹÁ¦¡¢ÉøÍ¸²âÊÔÖкÜÓÐÓá£

Ê®¡¢Í³¼Æ

Ç¿ÁÒÍÆ¼öʹÓÃһЩͳ¼Æ¿ò¼Ü£¬ËûÃÇÖ±¹ÛµØ¸æËßÄãÓжàÉÙÈËÓÃÄãµÄÓ¦Óá£X ÌØÐÔÔö¼ÓÁËÓû§Ã´£¿Y °´Å¥ºÜÄÑÕÒµ½Ã´£¿ÎªÁ˻شðÕâЩÎÊÌ⣬Äã¿ÉÒÔ·¢ËÍʼþ£¬ÔÊÐíʱ¼äÒÔ¼°ÆäËû¼Ç¼µÄÐÅÏ¢µ½Ò»¸ö¾Û¼¯ËüÃDz¢ÇÒ¿ÉÊÓ»¯ËüÃǵķþÎñ¡£±ÈÈ磬 Google Tag Manager ¡£Õâ¸öÊÇÒ»¸ö±È Google Analytics ¸ü¼ÓÓÐÓõĵط½ÊÇ¿ÉÒÔÔÚapp ºÍͳ¼ÆÖ®¼ä²åÈëÊý¾Ý£¬ËùÒÔÊý¾ÝÂß¼­¿ÉÒÔͨ¹ý web ·þÎñ½øÐÐÐ޸쬶ø²»ÓøüÐÂÄãµÄapp¡£

Ò»¸öºÃµÄʵ¼ùÊÇ´´½¨Ò»¸ö¼òµ¥µÄ helper À࣬±ÈÈç XYZAnalyticsHelper£¬´¦Àí app ÄÚ²¿ model ÒÔ¼°Êý¾Ý¸ñʽ (XYZModel, NSTimeInterval, ¡­)µÄ±ä»»£¬À´ÊÊÅä×Ö·û´®ÎªÖ÷µÄÊý¾Ý²ã£¬

- (void)pushAddItemEventWithItem:(XYZItem *)item editMode:(XYZEditMode)editMode
{
NSString *editModeString = [self nameForEditMode:editMode];

[self pushToDataLayer:@{
@"event": "addItem",
@"itemIdentifier": item.identifier,
@"editMode": editModeString
}];
}

ÁíÍâµÄÓŵãÊÇ£¬ÄãÔÚ±ØÒªµÄʱºò¿ÉÒÔÌæ»»Õû¸öͳ¼Æ¿ò¼Ü£¬¶ø²»Óøıä app ÆäËû²¿·Ö¡£

Crash Logs ±ÀÀ£ÈÕÖ¾

Ó¦¸ÃÈÃÄãµÄ app ÏòÒ»¸ö·þÎñ·¢ËͱÀÀ£ÈÕÖ¾¡£Äã¿ÉÒÔÊÖ¶¯ÊµÏÖ£¬Í¨¹ý PLCrashReporter ÒÔ¼°Äã×Ô¼ºµÄºó¶Ë¡£µ«ÊÇÇ¿ÁÒÍÆ¼öÄãʹÓÃÏÖÓеķþÎñ£¬±ÈÈçÏÂÃæµÄ

Crashlytics
HockeyApp
Crittercism
Splunk MINTexpress

µ±ÄãÅäÖúúó£¬È·±£Äã ±£´æÁË the Xcode archive (.xcarchive) ¶ÔÓÚÿһ¸ö app ·Å³öµÄ°æ±¾¡£Õâ¸ö ¹éµµÖаüº¬Á˹¹½¨µÄappµÄ¶þ½øÖÆÒÔ¼°µ÷ÊÔ·ûºÅ(dSYM)£¬ÄãÐèÒªÓÃÿ¸ö°æ±¾Ìض¨µÄapp°ÑÄãµÄ Crash ±¨¸æ·ûºÅ»¯¡£

ʮһ¡¢¹¹½¨

¹¹½¨ÉèÖÃ

ÿһ¸ö¼òµ¥µÄ app ¶¼¿ÉÒÔ²»Í¬µÄ·½Ê½¹¹½¨£¬×î»ù±¾µÄ·ÖÀëÊÇ Xcode ¸øÄã debug ºÍ release Ö®¼äµÄ¹¹½¨·½°¸¡£ºóÕßÔÚ±àÒëµÄʱºòÓиü¶àµÄÓÅ»¯£¬¿ÉÄܻᵼÖÂÄãÐèÒª¶àµ÷ÊÔһЩÎÊÌâ¡£ Apple ½¨ÒéÄãÔÚ¿ª·¢µÄʱºòÓà debug ģʽ£¬ÔÚ´ò°üµÄʱºòÓà release ÉèÖá£ÕâÊÇĬÈ쵀 Scheme £¨Play ºÍ Stop ºóÃæµÄÏÂÀ­²Ëµ¥£©£¬ÔËÐÐRun µÄʱºò»á Óà debug ÉèÖöøÔËÐÐ Archive µÄʱºò»áʹÓà release¡£

È»ºó£¬¶ÔÓÚÕæÊµµÄ app ÕâËÆºõÌ«¼òµ¥ÁË¡£Äã ²»¸Ã ÉèÖöà¸öΪ²âÊÔ£¬stagingºÍÆäËûÏà¹ØµÄ¿ª·¢»î¶¯¡£Ã¿Ò»¸ö¿ÉÄÜÓÐ×Ô¼ºµÄ URL£¬ÈÕÖ¾¼¶±ð£¬bundle ID£©ËùÒÔÄã¿ÉÒÔÒ»Æð°²×°ËüÃÇ£¬ÒÔ¼°ÃèÊöÎļþ¡£È»ºóÒ»¸ö¼òµ¥µÄ debug/release Çø±ð²»ÄÜ·ÖÀëÕâЩ£¬Äã¿ÉÒÔÔÚÄãÏîÄ¿µÄÉèÖÃÖÐµÄ Info Ñ¡Ï×ö¸ü¶àµÄ±àÒëÉèÖá£

¹ØÓÚ¹¹½¨ÉèÖÃµÄ xcconfig Îļþ

ͨ³£¹¹½¨ÉèÖÃÊÇ Xcode GUI¶¨ÒåµÄ£¬µ«ÊÇÄãͬÑù¿ÉÒÔÓà configuration settings files (¡°.xcconfig files¡±)£¬ÓŵãÊÇ£º

1.Äã¿ÉÒÔ×¢ÊÍ

2.Äã¿ÉÒÔ #include ÆäËû¹¹½¨ÉèÖÃÎļþ, ÄܰïÖúÄã¼õÉÙÖØ¸´:

Èç¹ûÄãÓÐһЩÊÊÓÃÓÚËùÓй¹½¨ÉèÖõÄÉèÖÃ, Ôö¼ÓÒ»¸öCommon.xcconfig ²¢ÇÒÔÚÆäËû¹¹½¨ÉèÖÃÎļþÀïÃæ #include

Èç¹ûÄ㣬±ÈÈ磬ϣÍûÓÐÒ»¸ö ¡°Debug¡± ¹¹½¨ÉèÖÃÎļþ£¬ÔÊÐí±àÒëÆ÷ÓÅ»¯£¬ÄãÖ»ÐèÒª #include "MyApp_Debug.xcconfig"À´ÖØÔØÆäËûÉèÖÃ

3.³åÍ»½â¾öºÍºÏ²¢±äµÃ¸üÇáËÉ

¸ü¶à¹ØÓÚÕâ¸öÖ÷ÌâµÄÐÅÏ¢Çë¿´Õâ¸ö PPT¡£

Targets

Ò»¸ö target ÊÇ´¦ÓÚ±ÈÏîÄ¿¸üµÍÒ»¼¶µÄ¼¶±ð¡£±ÈÈ磬һ¸öÏîÄ¿¿ÉÄÜÓжà¸ötarget£¬¿ÉÄÜÖØÔØËüµÄÏîÄ¿ÉèÖ᣼òµ¥µØËµ£¬Ã¿¸ö target ºÍÒ»¸ö appÏ൱¡£±ÈÈ磬Äã¿ÉÄÜÓм¸¸öÒòΪ¹ú¼ÒÇø·ÖµÄ app £¨´ÓͬÑùµÄ´úÂë±àÒ룩À´Ìá½»µ½ App Store¡£Ã¿¸ö»áÓÐ development/staging/release µÄ¹¹½¨£¬ËùÒÔ×îºÃͨ¹ý¹¹½¨ÉèÖöø²»ÊÇ targetÀ´Çø·Ö¡£Ò»¸ö app Ö»ÓÐÒ»¸ö target ÊǺÜÉÙ¼ûµÄ¡£

Schemes

Schemes ¸æËß Xcode ÔÚÄãµã»÷ Run, Test, Profile, Analyze »òÕß Archive ²Ù×÷µÄʱºòÓ¦¸ÃÔõô×ö¡£ËüÃǰÑÕâЩ²Ù×÷Ó³Éäµ½Ò»¸ö target ºÍÒ»¸ö¹¹½¨ÉèÖÃÖС£Äã¿ÉÒÔ´«µÝÆô¶¯²ÎÊý£¬±ÈÈç app ÐèÒªÔÊÐíµÄÓïÑÔ£¨ÎªÁ˲âÊÔ±¾µØ»¯£©»òÕßһЩÁËΪÁ˵÷ÊÔÓõÄÕï¶Ï±êÖ¾¡£

Ò»¸ö½¨ÒéµÄ Scheme ÃüÃûÊÇ MyApp () [Environment]:

MyApp (English) [Development]
MyApp (German) [Development]
MyApp [Testing]
MyApp [Staging]
MyApp [App Store]

¶ÔÓÚ´ó¶àÊý»·¾³À´ËµÓïÑÔ²¿·ÖÊDz»±ØÒªµÄ£¬app »á¿ÉÄÜ»áÒÔ·Ç Xcode µÄ·½Ê½°²×°£¬±ÈÈçÓà TestFlight£¬ Æô¶¯²ÎÊý»á±»ºöÂÔ¡£Õâ¸öÇé¿öÏ£¬ÎªÁ˲âÊÔ±¾µØ»¯ÐèÒªÊÖ¶¯ÉèÖÃÉ豸µÄÓïÑÔ¡£

Ê®¶þ¡¢²¿Êð

²¿ÊðÒ»¸öÈí¼þµ½ iOS É豸Éϲ¢²»Ö±¹Û¡£µ«ÊÇÓÐһЩºËÐĹ۵㣬ֻҪÀí½âÁË£¬¶ÔÄãÓкܴóµÄ°ïÖú¡£

Ç©Ãû

µ±ÄãÐèÒªÔÚÕæÊµÉ豸ÉÏÔËÐÐÈí¼þµÄʱºò£¬ÄãÐèÒªÓÃÒ»¸ö Apple ÈÏÖ¤µÄ Ö¤Êé Ç©Ãû¡£Ã¿Ò»¸öÖ¤ÊéÊÇÁ¬½Óµ½Ò»¸ö ¹«¡¢Ë½ ÃÜÔ¿¶Ô£¬Ë½Ô¿»á±£´æÔÚÄãµÄ Mac µÄ KeyChain ÀïÃæ£¬Ö¤ÊéÓÐÁ½ÖÖÀàÐÍ

1.¿ª·¢Ö¤Êé: ÿ¸ö×éµÄ¿ª·¢Õß¶¼ÓÐ×Ô¼ºµÄÖ¤Ê飬¶øÇÒËüͨ¹ýÇëÇóÌØµ½¡£Xcode¿ÉÒÔ°ïÄãÍê³É£¬µ«ÊÇ×îºÃ²»Óõã»÷ "Fix issue" À´Íê³É£¬¶øÊÇÀí½âËüµ½µ××öÁËʲôÊÂÇé¡£ÔÚ²¿Ê𿪷¢°æ±¾µ½É豸ÉϵÄʱºòÐèÒªÕâ¸öÖ¤Êé¡£

2.·¢²¼Ö¤Êé: ¿ÉÒÔÓжà¸ö£¬µ«ÊÇ×îºÃÿһ¸ö×éÖ¯ÓÐÒ»¸ö£¬²¢ÇÒͨ¹ýÄÚ²¿ÇþµÀ¹²Ïí¡£ÔÚÌá½» App µ½ App Store »òÕßÄãµÄÆóÒµµÄÄÚ²¿ App StoreµÄʱºòÐèÒªÕâ¸öÖ¤Êé¡£

ÃèÊöÎļþ

³ýÁËÖ¤Ê飬»¹ÓÐ ÃèÊöÎļþ£¬ Ëü°ÑÉ豸ºÍÖ¤ÊéÁ¬½ÓÆðÀ´¡£¶øÇÒ£¬Ëü·Ö³É¿ª·¢ºÍ·¢²¼Á½ÖÖÀàÐÍ¡£

Development provisioning profile: ¿ª·¢ÃèÊöÎļþ£¬ Ëü°üº¬ÁËÒ»¸ö°üº¬ËùÓÐÄܰ²×°Õâ¸ö app µÄÉ豸ÁÐ±í¡£ËüÁ¬½ÓÁËÒ»¸ö»òÕß¶à¸ö¿ª·¢ÕßÔÊÐíÕâ¸öÃèÊöÎļþʹÓõÄÖ¤Êé¡£ÃèÊöÎļþ¿ÉÒÔÈ·ÈÏÌØ¶¨µÄ app£¬µ«ÊǶÔÓÚ´ó¶àÊý¿ª·¢Ä¿µÄ£¬ËüÌØ±ðÊʺÏÓÃÒ»¸öͨÅä·ûÃèÊöÎļþ£¬Ò²¾ÍÊÇ Apple ID ÒÔÒ»¸ö ÐǺŠ(*)½áβµÄ¡£

Distribution provisioning profile: ·¢²¼ÃèÊöÎļþ ±¾Éí£¬¶ÔÓÚ²»Í¬Ê¹ÓÃÄ¿µÄÒ²Óв»Í¬µÄÀàÐÍ¡£Ã¿Ò»¸ö·¢²¼ÃèÊöÎļþ Á´½Óµ½Ò»¸ö·¢²¼Ö¤Ê飬²¢ÇÒÔÚÖ¤Êé¹ýÆÚµÄʱºòʧЧ¡£

Ad-Hoc: ¾ÍÏñ¿ª·¢Ö¤ÊéÒ»¸ö£¬Ëü°üº¬ÁËÒ»¸ö app ¿ÉÒÔ°²×°µÄÉ豸µÄ°×Ãûµ¥¡£Õâ¸öÃèÊöÎļþ¿ÉÒÔÓÃÀ´×ö beta °æ±¾£¬Ã¿Äê¿ÉÒÔ²âÊÔ 100 ¸öÉ豸¡£ÎªÁË×ö¸üϸÖµIJâÊÔÒÔ¼°Éý¼¶µ½ 1000 ¸ö²âÊÔÓû§£¬Äã¿ÉÒÔʹÓà Apple ×î½ü·¢²¼µÄ TestFlight ·þÎñ£¬ Supertop ÌṩÁËÒ»¸ö summary of its advantages and issues.

App Store: Õâ¸ö profile ûÓÐÁгöÉ豸£¬ÈκÎÈ˶¼¿ÉÒÔͨ¹ýÆ»¹û¹Ù·½µÄ·¢²¼À´°²×°£¬ËùÓÐ App Store ·¢²¼µÄ App¶¼ÐèÒªÕâ¸öÖ¤Êé
Enterprise: ¾ÍÏñ App Store£¬Ã»ÓÐÉ豸°×Ãûµ¥£¬ÈκÎͨ¹ýÆóÒµÄÚ²¿ÍøÂçµÄÈ˶¼¿ÉÒÔ´ÓÄÚ²¿¡°Ó¦ÓÃÉ̵ꡱ°²×°¡£Ó¦ÓÃÉ̵ê¿ÉÄÜÖ»ÊÇÒ»¸ö´øÁ¬½ÓµÄÍøÕ¾¡£Õâ¸öÃèÊöÎļþÖ»ÔÊÐíÆóÒµÕ˺ÅʹÓá£

Ïëͬ²½ËùÓеÄÖ¤ÊéºÍÃèÊöÎļþµ½ÄãµÄ»úÆ÷£¬¿ÉÒÔÈ¥ Xcode µÄ Preferences µÄ AccountsÏ£¬Ìí¼ÓÄãµÄ Apple ID, È»ºóË«»÷ÄãµÄ Team Ãû³Æ¡£È»ºóµ×²¿»áÓÐÒ»¸öˢа´Å¥£¬ÓÐʱºòÄãÐèÒªÖØÆô Xcode À´Èö«Î÷ÏÔʾ³öÀ´¡£

µ÷ÊÔÃèÊöÎļþ

ÓÐʱºòÄãÐèÒªµ÷ÊÔÒ»¸öÃèÊöÎļþµÄÎÊÌâ¡£±ÈÈ磬XCode ¿ÉÄܾܾø°²×° app µ½Ò»¸öÉ豸ÖУ¬ÒòΪÉ豸ûÓÐÔÚ¿ª·¢»òÕß Ad-doc·¢²¼µÄµÄÃèÊöÎļþÉ豸ÁбíÖС£Õâ¸öÇé¿öÏ£¬Äã¿ÉÒÔʹÓà Craig Hockenberry µÄ Provisioning ²å¼þ£¬ä¯ÀÀ ~/Library/MobileDevice/Provisioning Profiles£¬Ñ¡ÔñÒ»¸ö .mobileprovision Îļþ£¬²¢Óÿոñ¼üµ÷Óà Finder µÄ¿ìËÙ²é¿´ÌØÐÔ£¬Ëü»á¸æËßÄã¹ØÓÚÉ豸£¬entitlements£¬Ö¤ÊéÒÔ¼° Apple IDµÄÐÅÏ¢¡£

ÉÏ´«

iTunes Connect ÊÇÄã¹ÜÀíÉÏ´«µ½ App StoreµÄ App µÄºóÌ¨ÍøÕ¾¡£ Xcode 6 ÐèÒªÒ»¸ö Apple ID ×÷Ϊ¿ª·¢ÕßÕ˺ÅÀ´Ç©Ãû²¢ÇÒÉÏ´«¶þ½øÖÆ¡£Èç¹ûÄãÓжà¸ö¿ª·¢ÕßÕ˺ŶøÇÒÒªÉÏ´«ËüÃÇµÄ app ¾ÍÐèÒªÒ»µã¼¼ÇÉ¡£ ÒòΪ Ò»¸ö Apple ID Ö»ÄܺÍÒ»¸ö iTunes Connect Õ˺ŹØÁª, Ò»¸ö±äͨ·½°¸ÊÇΪÿ¸ö iTunes Connect Õ˺Ŵ´½¨Ò»¸öеġ¡Apple ID, ʹÓà Application Loader È¡´ú Xcode À´ÉÏ´«Ó¦Óá£ÕâÑùÓÐЧµØ½â³ýÁËÉÏ´«×îÖÕ .app Îļþ¹¹½¨ºÍÇ©ÃûµÄñîºÏ¡£

ÔÚÉÏ´«¶þ½øÖƺó£¬ÄÍÐĵȴý£¬¿ÉÄÜÒª»¨ÉÏÒ»¸öСʱ¡£µ±ÄãµÄ App ³öÏֺ󣬿ÉÒÔÁ´½Óµ½¶ÔÓ¦µÄApp°æ±¾²¢ÇÒÌá½»ÉóºË

Ê®Èý¡¢Ó¦ÓÃÄÚ¹ºÂò

µ±ÑéÖ¤Ò»¸ö AppÄÚ¹ºµÄ receiptµÄʱºò£¬¼Çס×öÒÔϲ½Ö裺

1.Authenticity: receipt ÊÇÀ´×Ô Apple µÄ

2.Integrity: receipt ûÓб»´Û¸Ä

3.App match: receipt µÄ App bundle ID ºÍÄãµÄ App bundle ID Ò»ÖÂ

4.Product match: receipt ÀïÃæ²úÆ· IDºÍÄãÆÚÍûµÄÒ»ÖÂ

5.Freshness: Äã֮ǰûÓÐÑéÖ¤Ò»ÑùµÄ receipt ID

   
2262 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ