Ò»¡¢ÎªÊ²Ã´ÔĶÁ±¾Îĵµ
Ìø½øÁË 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 ÏîĿĿ¼ÏÂÔËÐУº
Ëü»á´´½¨Ò»¸ö Podfile£¬ »á¹ÜÀíÄãËùÓеÄÒÀÀµ£¬ÔÚ Podfile
ÖмÓÈëÄãµÄÒÀÀµºó£¬ÔÊÐí
À´°²×°µÚÈý·½¿â²¢ÇÒ½«ËüÃÇ×÷Ϊ workspace µÄÒ»²¿·Ö£¬ÄãµÄ workspace
Ò²»á°üº¬Äã×Ô¼ºµÄÏîÄ¿¡£ Ò»°ãÍÆ¼öÌá½»Äã×Ô¼ºµÄÏîÄ¿µÄÒÀÀµ£¬¶ø²»ÊÇÿ¸ö¿ª·¢ÕßÔÚÒ»¸ö checkoutÖ®ºóÔËÐÐ
pod install ¡£
×¢ÒâÔÚÖ®ºó£¬ÄãÐèÒª´ò¿ª .xcworkspace ¶ø²»ÊÇ .xcproject£¬·ñÔòÄãµÄ´úÂë¾Í²»Äܱ»±àÒëÁË£¬ÃüÁ
»áÉý¼¶ËùÓÐµÄ 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·ÖÖ§µÄ£º
ËÄ¡¢³£Óÿâ
×ܵÃÀ´Ëµ£¬À´°ÑÒ»¸öµÚÈý·½¿â¼ÓÈëµ½ÄãµÄÏîÄ¿ÖÐÐèÒªÉ÷ÖØ¿¼ÂÇ¡£È·Êµ£¬Ò»¸öÁéÇɵĿâ»òÐíÄܰïÖúÄã½â¾öÏÖÔÚµÄÎÊÌ⣬µ«ÊÇ¿ÉÄÜÔÚÖ®ºóÏÝÈëά»¤µÄجÃΣ¬±ÈÈçÔÚÏÂÒ»¸öϵͳ°æ±¾¸Ä±äһЩ¶«Î÷Ö®ºó£¬»òÕßÒ»¸öµÚÈý·½¿âµÄ³¡¾°±ä³ÉÁ˹ٷ½µÄ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
|