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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS App×é¼þ»¯¿ª·¢Êµ¼ù
 
  1819  次浏览      49
 2018-3-15 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚwww.chinaznyj.com,ÎÒÃÇÈ¥×Ðϸ²é¿´ÁËÔ­App´úÂ룬·¢ÏֺܶණÎ÷¶¼ÐèÒªÖØÓöøÎÒÃÇȴûÓаÑËüÃÇ×é¼þ»¯¡£±¾ÎÄ´úÂë½²½â£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£

ǰÒò

ÆäʵÎÒÃÇÕâ¸ö7ÈËiOS¿ª·¢ÍŶӲ¢²»ÊʺÏ×é¼þ»¯¿ª·¢¡£Ô­ÒòÊÇÒòΪÐԼ۱ȵͣ¬ÐèÒª»¨ºÜ¶àʱ¼äºÍ¾­ÀúÈ¥×öÕâ¼þÊ£¬´øÀ´µÄÊÕÒæ²¢²»Äܳ¹µ×¸Ä±äʲô¡£µ«ÊÇÒòΪÓÐ2¡«3¸öÐÇÆÚµÄ¿ÕµµÆÚ£¬²¢²»ÊǺÜæ£»ÁíÍâÊÇ¿ÉÒÔÓÃÔÚÒ»¸öȫеÄAppÉÏ¡£ËùÒÔ¾ö¶¨Ïë³¢ÊÔÏÂ×é¼þ»¯¿ª·¢¡£

Ëùν³¢ÊÔÒ²¾ÍÊÇ˵£ºÈ¥³¢ÊÔ½â¾ö×é¼þ»¯¿ª·¢µ±ÖеÄһЩÎÊÌâ¡£Èç¹ûÄܽâ¾ö£¬²¢ÇÒÓбȽϺõĽâ¾ö·½°¸£¬ÄǾͼÌÐøÏÂÈ¥£¬·ñÔò¾Í·ÅÆú¡£

±³¾°

ÍÑÀëʵ¼ÊÇé¿öȥ̸·½°¸µÄÑ¡ÐÍÊDz»ºÏÀíµÄ¡£

ËùÒÔÏȼòµ¥½éÉÜϱ³¾°£ºÎÒÃÇÊÇÒ»¼ÒÄÉ˹´ï¿Ë½»Ò×ËùÉÏÊеĿƼ¼ÆóÒµ¡£ÎÒÃǹ«Ë¾»¹Óкü¸¿îApp£¬Óɲ»Í¬µÄ¼¸¸öÍŶÓȥά»¤£¬ÎÒÃÇÊÇÆäÖÐÖ®Ò»¡£ÎÒÃÇÕâ¸öÍŶÓÊÇÒ»¸ö7È˵ÄiOS¿ª·¢Ð¡ÍŶӡ£×÷Õß±¾ÈËÊÇС×鳤¡£

֮ǰµÄAppÒѾ­Ê¹ÓÃÁËÄ£¿é»¯£¨CocoaPods£©¿ª·¢£¬²¢ÇÒÒѾ­Ê¹ÓÃÁË ¶þ½øÖÆ»¯ ·½°¸¡£AppÒѾ­ÔÚʹÓÃ×Ô¶¯»¯¼¯³É¡£

ËäȻҪ¿ª·¢Ò»¸öÐÂApp£¬µ«ÊǺܶàÒµÎñºÍ֮ǰµÄAppÊÇÒ»ÑùµÄ»òÕßÏàËÆµÄ¡£

ΪʲôҪдÕâÆª²©¿Í£¿

Ïë°ÑÕû¸ö¹ý³Ì¼Ç¼ÏÂÀ´£¬·½±ãÒÔºó»Ø¹Ë¡£

ÎÒÃǵÄ˼·ºÍ½â¾ö·½°¸²»Ò»¶¨ÊǶԵĻòÕßÊÇ×îºÃµÄ¡£ËùÒÔÏ£Íû´ó¼Ò¿´ÁËÕâÆª²©¿ÍÖ®ºó£¬ÄܸøÎÒÃÇÌṩºÜ¶à½¨ÒéºÍ±ðµÄ½â¾ö·½°¸£¬ÈÃÎÒÃÇ¿ÉÒÔÓÅ»¯Ê¹µÃÕâ¸ö×é¼þ»¯¿ª·¢µÄ·½°¸ÄܱäµÃ¸ü¼ÓºÃ¡£

¼¼ÊõÕ»

gitlab

gitlab-runner

CocoaPods

CocoaPods-Packager

fir

¶þ½øÖÆ»¯

fastlane

deploymate

oclint

Kiwi

³É¹û

ʹÓÃ×é¼þ»¯¿ª·¢AppÖ®ºó£º

´úÂëÌá½»¸ü¹æ·¶£¬ÖÊÁ¿Ìá¸ß¡£ÌåÏÖÔÚ²âÊÔÈËÔ±·´À¡µÄbugÃ÷ÏÔ¼õÉÙ¡£

±àÒë¼Ó¿ì¡£ÔÚ¶¼ÊÇÔ´ÂëµÄÇé¿öÏ£ºÔ­AppÐèÒª150s×óÓÒÕû¸ö±àÒëÍê±Ï£¬È»ºó¿ª·¢ÈËÔ±²Å¿ÉÒÔ¿ªÊ¼µ÷ÊÔ¡£¶øÏÖÔÚ×é¼þ»¯Ö®ºó£¬Ä³¸öÒµÎñ×é¼þÖ»ÐèÒª10s¡«20s×óÓÒ¡£ÔÚÒÀÀµ¶þ½øÖÆ»¯×é¼þµÄÇé¿öÏ£¬ÒµÎñ×é¼þ±àÒëËÙ¶ÈÒ»°ãµÍÓÚ10s¡£

·Ö¹¤¸üΪÃ÷È·£¬´Ó¶øÌáÉý¿ª·¢Ð§ÂÊ¡£

Áé»î£¬ñîºÏµÍ¡£

½áºÏMVVM¡£·Ç³£Ï¸Öµĵ¥Ôª²âÊÔ£¬Ìá¸ß´úÂëÖÊÁ¿£¬±£Ö¤AppÎȶ¨ÐÔ¡£ÌåÏÖÔÚ²âÊÔÈËÔ±·´À¡µÄbugÃ÷ÏÔ¼õÉÙ¡£

»Ø¹ö¸ü·½±ã¡£ÎÒÃǾ­³£»á·¢ÉúÒµÎñ»òÕßUI±ä»ØÖ®Ç°°æ±¾µÄÇé¿ö£¬ÒÔǰÎÒÃǶ¼ÊÇcheckout³ö֮ǰµÄ´úÂë¡£¶øÏÖÔÚ×é¼þ»¯ÁËÖ®ºó£¬ÎÒÃÇÖ»ÐèҪʹÓþɰ汾µÄÒµÎñ×é¼þPod¿â£¬»òÕßÔھɰ汾µÄ»ù´¡ÉÏÔÙ·¢Ò»¸öPod¿â¡£

ÐÂÈ˸üÈÝÒ×ÉÏÊÖ¡£

¶ÔÓÚÎÒÀ´Ëµ£º

¸ü¼ÓÈÝÒ׵ذѿشúÂëÖÊÁ¿¡£

¸ü¼ÓÈÝÒ×µØÖªµÀС×é³ÉÔ±×öÁËЩʲô¡£

¸ü¼ÓÈÝÒ׵طÖÅ乤×÷¡£

¸ü¼ÓÈÝÒ׵ذ²ÅÅгÉÔ±¡£

½âñî

ÎÒÃǵÄÏë·¨ÊÇÕâÑùµÄ£¬¾ÍËã×îºó×ö²»³É×é¼þ»¯¿ª·¢£¬°ÑÕâЩӦ¸ÃÖØÓõĴúÂë³é³öÀ´×ö³ÉPod¿âҲûÓÐʲôӰÏì¡£ËùÒÔÓÅÏÈ×öÁËÕâÒ»²½¡£

ÄÄЩ¶«Î÷ÐèÒª³é³ÉPod¿â£¿

ÎÒÃÇ֮ǰµÄAppÒѾ­Ê¹ÓÃÁËÄ£¿é»¯£¨CocoaPods»¯£©¿ª·¢¡£ÎÒÃÇÒѾ­°Ñ»áÔÚAppÖ®¼äÖØÓõÄUtil¡¢Category¡¢ÍøÂç²ãºÍ±¾µØ´æ´¢µÈµÈÕâЩ¶«Î÷³é³ÉÁËPod¿â¡£»¹ÓÐЩһЩºÍÒµÎñÏà¹ØµÄ£¬±ÈÈçYTXChart,YTXChartSocket£»ÕâЩҲÊÇÔÚ¸÷¸öAppÖ®¼äÖØÓõġ£

ËùÒԵóöÒ»¸öºÜ¼òµ¥µÄ½áÂÛ£ºÒªÔÚAppÖ®¼ä¹²ÏíµÄ´úÂë¾ÍÓ¦¸Ã³é³ÉPod¿â£¬°ÑËüÃÇ×÷Ϊһ¸ö¸ö×é¼þ¡£

ÎÒÃÇÈ¥×Ðϸ²é¿´ÁËÔ­App´úÂ룬·¢ÏֺܶණÎ÷¶¼ÐèÒªÖØÓöøÎÒÃÇȴûÓаÑËüÃÇ×é¼þ»¯¡£

ΪʲôûÓаÑÕâЩ´úÂë×é¼þ»¯£¿

ÒòΪµ±Ê±Ã»ÏëºÃÔõô½âñ¾Ù¸öÀý×Ó¡£

ÓÐÒ»¸öÀà½Ð×öYTXAnalytics¡£ÊÇÒÀÀµUMengAnalyticsÀ´×öͳ¼ÆµÄ¡£ ËüµÄñîºÏÊÇÔÚÓÚÒ»¸ö·½·¨¡£Õâ¸ö·½·¨ÊÇÓÃÀ´ÊÕ¼¯ÐÅÏ¢µÄ¡£ËüÒÀÀµÁËUser£¬»¹ÒÀÀµÁËcurrentServerIdÕâ¸ö¶«Î÷¡£

+ (NSDictionary*)collectEventInfo:(NSString*)event withData:(NSDictionary*)data
{
.......
return @{
@"event" : event,
@"eventType" : @"event",
@"time" : [[[NSDate date] timeIntervalSince1970InMillionSecond] stringValue],
@"os" : device.systemName,
@"osVersion" : device.systemVersion,
@"device" : device.model,
@"screen" : screenStr,
@"network" : [YTXAnalytics networkType],
@"appVersion" : [AppInfo appVersion],
@"channel" : [AppInfo marketId],
@"deviceId" : [ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString,
@"username" : objectOrNull([YTXUserManager sharedManager].currentUser.username),
@"userType" : objectOrNull([[YTXUserManager sharedManager].currentUser.userType stringValue]),
@"company" : [[ServiceProvider sharedServiceProvider].currentServerId stringValue],
@"ip" : objectOrNull([SSNetworkInfo currentIPAddress]),
@"data" : jsonStr
};
}

½â¾ö·½°¸ÊÇ£¬¸ãÁËÒ»¸öblock£¬°Ñ»ñÈ¡ÕâЩÐÅÏ¢µÄÔðÈ檳öÀ´¡£

[YTXAnalytics sharedAnalytics].analyticsDataBlock = ^ NSDictionary *() {
return @{
@"appVersion" : objectOrNull([PBBasicProviderModule appVersion]),
@"channel" : objectOrNull([PBBasicProviderModule marketId]),
@"username" : objectOrNull([PBUserManager shared].currentUser.username),
@"userType" : objectOrNull([PBUserManager shared].currentUser.userType),
@"company" : objectOrNull([PBUserManager shared].currentUser.serverId),
@"ip" : objectOrNull([SSNetworkInfo currentIPAddress])
};
};

ÎÒÃǵÄñîºÏ´ó¶àÊý¶¼ÊÇÕâÖÖ¡£½â¾ö·½°¸¶¼ÊÇŪÁËÒ»¸öblock£¬°Ñ»ñÈ¡ÐÅÏ¢µÄÖ°Ô𶪳öÀ´µ½ÍâÃæ¡£

ÎÒÃǽâñîµÄ·½Ê½¾ÍÊÇÒÔϼ¸ÖÖ£º

°ÑËüÒÀÀµµÄ´úÂëÏÈ×ö³ÉÒ»¸öPod¿â£¬È»ºóת¶øÒÀÀµPod¿â¡£ÓеãÏñÊÇ¡°ÒÀÀµÏ³Á¡±¡£

ʹÓÃcategoryµÄ·½Ê½°ÑÒÀÀµ¸Ä³É×éºÏµÄ·½Ê½¡£

ʹÓÃÒ»¸öblock»òdelegate£¨Ð­Ò飩°ÑÕⲿ·ÖÖ°Ô𶪳öÈ¥¡£

Ö±½Ócopy´úÂë¡£copy´úÂëÕâ¸öÊÂÇé¿´ÆðÀ´ºÜ²»ÓÅÑÅ£¬µ«ÊÇËüµÄºÃ´¦¾ÍÊǿ졣¶ÔÓÚһЩ²»ÖØÒªµÄ¹¤¾ß·½·¨£¬Ò²¿ÉÒÔÖ±½Ócopyµ½ÄÚ²¿À´Óá£

³õʼ»¯

AppDelegate³ä³âן÷ÖÖ³õʼ»¯¡£ ±ÈÈçÎÒÃÇ×Ô¼ºµÄ´úÂë¡£ÒѾ­Ö»ÊǽØÈ¡Á˲¿·Ö£¡

[self setupScreenShowManager];

//event start
[YTXAnalytics createYtxanalyticsTable];
[YTXAnalytics start];
[YTXAnalytics page:APP_OPEN];
[YTXAnalytics sharedAnalytics] .analyticsDataBlock = ^ NSDictionary *() {
return @{
@"appVersion" : objectOrNull ([AppInfo appVersion]),
.......
@"ip" : objectOrNull ([SSNetworkInfo currentIPAddress]),
};
};

[self registerPreloadConfig];
//Migrate UserDefault ×ªÒÆ standardUserDefaultµ½group
[NSUserDefaults migrateOld UserDefaultToGroup];
[ServiceProvider sharedServiceProvider];

[YTXChatManager sharedYTXChatManager];
[ChartSocketManager sharedChartSocketController].delegate = [ChartProvider sharedChartProvider];

//³õʼ»¯×î³õµÄÐÐÇ鼯ºÏ
[[ChartProvider sharedChartProvider] addMetalList: [ChartSocketManager sharedChartSocketController].quoteList];

//³õʼ»¯»·ÐÅÐÅÏ¢Manager
[YTXEaseMobManager sharedManager];

±ÈÈçµÚÈý·½£º

//×¢²á»·ÐÅ
[self setupEaseMob:application didFinishLaunchingWithOptions:launchOptions];

//Talking Data
[self setupTalkingData];
[self setupAdTalkingData];
[self setupShareSDK];
[self setupUmeng];
[self setupJSPatch];
[self setupAdhocSDK];
[YTXGdtAnalytics communicateWithGdt];//¹ãµãͨ

//³õʼ»¯»·ÐÅÐÅÏ¢Manager
[YTXEaseMobManager sharedManager];

Ê×ÏÈÕâЩ³õʼ»¯µÄ¶«Î÷Êǻᱻ¸÷¸öÒµÎñ×é¼þ¶¼Óõ½µÄ¡£

ÄÇÎÒ×é¼þ»¯¿ª·¢µÄʱºò£¬Ã¿Ò»¸öÒµÎñ×é¼þÈçºÎ±£Ö¤ÎÒʹÓÃÕâЩ¶«Î÷µÄʱºòÒѾ­³õʼ»¯¹ýÁËÄØ£¿ÄѵÀÿһ¸öÒµÎñ×é¼þ¶¼³õʼ»¯Ò»±é£¿ÓвÎÊýÔõô°ì£¬Äܲ»ÄÜʹÓõ¥Àý£¿

µ«ÎÊÌâÊǵÚÈý·½¿â»ù±¾¶¼ÐèҪע²áÒ»¸öAppKey£¬ÎÒÿһ¸öÒµÎñ×é¼þÀﶼдһ·Ý£¿ÄÇÑù¿Ï¶¨²»ºÃ£¬ÄÇÎÒÅäÖÃÔÚÖ÷AppÀïµÄinfo.plistÀïÃæ£¬Ã¿Ò»¸öÒµÎñ×é¼þ¶¼³õʼ»¯Ò»ÏºÃÁË£¬Ò²²»»áÓÐʲô¸±×÷Óᣵ«ÕâÑù¸Ð¾õ²»ÓÅÑÅ£¬¶øÇÒÓкܶàÖØ¸´´úÂë¡£Íòһij¸öAppKey»òÖØÒª²ÎÊý¸ÄÁË£¬ÄÇÿһ¸öÒµÎñ×é¼þÆñ²»ÊǶ¼µÃ¸ÄÁË¡£ÕâÑù¿Ï¶¨²»ÐС£ÁíÍâÒ»µã£¬ÄÇÎÒµÄÒµÎñ×é¼þ±ØÐëÒÀÀµÖ÷AppµÄÄÚÈÝÁË¡£ÎÞÂÛÊÇÔÚÖ÷AppÀïµ÷ÊÔ»¹ÊǰÑÖ÷AppµÄinfo.plistµÄÏà¹ØÄÚÈÝ¿½±´¹ýÀ´Ê¹Óá£

¸ü¹Ø¼üµÄÊÇÓÐһЩµÚÈý·½µÄ¿âÐèÒªÔÚapplication: didFinishLaunchingWithOptions:ʱ³õʼ»¯¡£

//³õʼ»¯»·ÐÅ£¬shareSDK, ÓÑÃË, Talking DataµÈ
[self setupThirdParty:application didFinishLaunchingWithOptions:launchOptions];

ÓÐûÓиüºÃµÄ°ì·¨ÄØ£¿

Ê×ÏÈÎÒдÁËÒ»¸ö YTXModule ¡£ËüÀûÓÃruntime£¬²»ÐèÒªÔÚAppDelegateÖÐÌí¼ÓÈκδúÂ룬¾Í¿ÉÒÔ²¶»ñAppÉúÃüÖÜÆÚ¡£

ÔÚij¸öÏë»ñµÃAppÉúÃüÖÜÆÚµÄÀàÖеÄ.mÖÐÕâÑùʹÓãº

YTXMODULE_EXTERN()
{
//Ï൱ÓÚload
isLoad = YES;
}
+ (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions
{
//ʵÏÖÒ»ÑùµÄ·½·¨Ãû£¬µ«ÊDZØÐëÊǾ²Ì¬·½·¨¡£
return YES;
}

·Ö²ã

ÒòΪÔÚ½â¾ö³õʼ»¯ÎÊÌâµÄʱºò£¬ÒªÏÈÉè¼ÆºÃ²ã¼¶½á¹¹¡£ËùÒÔÕâÀïÍ»È»Ìø×ªµ½·Ö²ã¡£

Éϸöͼ£º

ÎÒÃÇ×Ô¼º¶¨Á˼¸¸öÔ­Ôò¡£

ÒµÎñ×é¼þÖ®¼ä²»ÄÜÓÐÒÀÀµ¹ØÏµ¡£

°´ÕÕͼʾ²»ÄÜ¿ç²ãÒÀÀµ¡£

ËùνÈõÒµÎñ×é¼þ¾ÍÊǰüº¬×ÅÉÙ²¿·ÖÒµÎñ£¬²¢ÇÒ¿ÉÒÔÔÚÕâ¸öAppÄڵĸ÷¸öÒµÎñ×é¼þÖ®¼äÖØÓõĴúÂë¡£

ÒªÒÀÀµYTXModuleµÄ×é¼þÒ»¶¨ÒªÒÔModule½á⣬¶øÇÒËüÒ»¶¨ÊǸöÒµÎñ×é¼þ»òÊÇÈõÒµÎñ×é¼þ¡£

ÈõÒµÎñ×é¼þÒÔApp´úºÅ¿ªÍ·£¨±ÈÈçPB£©£¬ÒÔModule½áβ¡£Àý£ºPBBasicProviderModule¡£

ÒµÎñ×é¼þÒÔApp´úºÅ¿ªÍ·£¨±ÈÈçPB£©BusinessModule½áβ¡£Àý£ºPBHomePageBusinessModule¡£

ÒµÎñ×é¼þÖ®¼ä²»ÄÜÓÐÒÀÀµ¹ØÏµ£¬ÕâÊǹ«ÈϵĵÄÔ­Ôò¡£·ñÔò¾ÍʧȥÁË×é¼þ»¯¿ª·¢µÄºËÐļÛÖµ¡£

ÈõÒµÎñ×é¼þÖ®¼äÒ²²»Ó¦µ±ÓÐÒÀÀµ¹ØÏµ¡£Èç¹ûÓÐÒÀÀµ¹ØÏµËµÃ÷ÄãµÄ¹¦ÄÜ»®·Ö²»×¼È·¡£

³õʼ»¯

ÎÒÃÇÔ¼¶¨ºÃÁ˲㼶½á¹¹£¬Ã÷È·ÁËÖ°ÔðÖ®ºó¡£ÎÒÃǾͿÉÒÔÌø»Ø³õʼ»¯µÄÉè¼ÆÁË¡£

´´½¨Ò»¸öPBBasicProviderModuleÈõÒµÎñ×é¼þ¡£

Ëüͨ¹ýÒÀÀµYTXModuleÀ´²¶×½AppÉúÃüÖÜÆÚ¡£

ËüÀ´¸ºÔð³õʼ»¯×Ô¼ºµÄºÍµÚÈý·½µÄ¶«Î÷¡£

ËùÓÐÒµÎñ×é¼þ¶¼¿ÉÒÔÒÀÀµÕâ¸öÈõÒµÎñ×é¼þ¡£

ËüÀ´±£Ö¤ËùÓж«Î÷Ò»¶¨ÊÇÊdzõʼ»¯Íê±ÏµÄ¡£

ËüÀ´Í³Ò»¹ÜÀí¡£

ËüÀ´±©Â¶Ò»Ð©ÀàºÍ¹¦ÄܸøÒµÎñ×é¼þʹÓá£

·´Õý¾ÍÊÇÒµÎñ×é¼þÖÐÒÀÀµPBBasicProviderModule£¬Ëü±£Ö¤ËüÀïÃæµÄËùÓж«Î÷¶¼ÊǺÃÓõġ£

ÒòΪÓÐÁËPBBasicProviderModule£¬ËùÒÔ²ÅÈÃÎÒ¸üÃ÷È·ÁËÈõÒµÎñ×é¼þÕâ¸ö¸ÅÄî¡£

ÒòΪÎÒÃÇÀÁ£¬Èç¹û°ÑPBBasicProvider¶¨ÒåΪҵÎñ×é¼þ¡£ÄÇËüºÍÆäËûÒµÎñ×é¼þÖ®¼äµÄͨОͱØÐëͨ¹ýBus¡¢Notification»òЭÒéµÈµÈ¡£

µ«ËüÓֿ϶¨ÊÇÒµÎñ°¡¡£ÒòΪÄÇЩAppKey¿Ï¶¨ÊǺÍÕâ¸öAppÓйØÏµµÄ£¬Ò²¾ÍÊÇAppµÄÏà¹ØÅäÖúͲÎÊýÒ²¿ÉÒÔ˵ÊÇÒµÎñ£»ÎÒÐèÒª³õʼ»¯ÉèÖÃÄÇЩBlockÒÀÀµUserÐÅÏ¢¡¢CurrentServerIdµÈµÈ¿Ï¶¨¶¼ÊÇÒµÎñ°¡¡£

ÄÇÖ»ºÃ¸ã¸öÈõÒµÎñ³öÀ´°¡¡£ÒòΪÎÒ²»ÄÜ´òÆÆÕâ¸öÔ­Ôò°¡£ºÒµÎñ×é¼þÖ®¼ä²»ÄÜ»¥ÏàÒÀÀµ¡£

ÔÙ½øÒ»²½·ÖÇåÈõÒµÎñ×é¼þºÍÒµÎñ×é¼þ¡£

ÒµÎñ×é¼þÀïÃæ»ù±¾¶¼ÓУºstoryboard¡¢nib¡¢Í¼Æ¬µÈµÈ¡£ÈõÒµÎñ×é¼þÀïÃæÒ»°ãûÓС£Õâ²»ÊǾø¶ÔµÄ£¬µ«Ò»°ãÇé¿öÊÇÕâÑù¡£

ÒµÎñ×é¼þÒ»°ã¶¼ÊÇAppÉÏijһ¾ßÌåÒµÎñ¡£±ÈÈçÊ×Ò³¡¢ÎÒ¡¢Ö±²¥¡¢ÐÐÇéÏêÇé¡¢XX½»Ò×´óÅÌ¡¢YY½»Ò×´óÅÌ¡¢XX½»Ò×ÖÐÅÌ¡¢×ÊѶ¡¢·¢Ïֵȵȡ£¶øÈõÒµÎñ×é¼þÊǸøÕâЩҵÎñ×é¼þÌṩ¹¦Äܵģ¬×Ô¼º²»Ö±½Ó±íÏÖÔÚAppÉÏչʾ¡£

ÎÒÃÇ»¹¿ÉÒÔ´´½¨Ò»Ð©ÈõÒµÎñ×é¼þ¸øÒµÎñ×é¼þÌṩ¹¦ÄÜ¡£µ±È»ÁË£¬²»Äܹ»ÀÄÓá£ÐèҪ׼ȷ»®·ÖÖ°Ôð¡£

×îºó£¬´úÂë´ó¸ÅÊÇÕâÑùµÄ£º

@implementation PBBasicProviderModule

YTXMODULE_EXTERN()
{

}

+ (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (nullable NSDictionary *)launchOptions
{
[self setupThirdParty: application didFinishLaunching WithOptions:launchOptions];
[self setupBasic: application didFinishLaunchingWithOptions: launchOptions];

return YES;
}

+ (void) setupThirdParty: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self setupEaseMob:application didFinishLaunchingWithOptions:launchOptions];
[self setupTalkingData];
[self setupAdTalkingData];
[self setupShareSDK];
[self setupJSPatch];
[self setupUmeng];
// [self setupAdhoc];
});
}

+ (void) setupBasic:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self registerBasic];

[self autoIncrementOpenAppCount];

[self setupScreenShowManager];

[self setupYTXAnalytics];

[self setupRemoteHook];
}

+ (YTXAnalytics) sharedYTXAnalytics
{
return ......;
}
......

ÉèÏë

Õâ¸öPBBasicProviderModule¼òÖ±¾ÍÊǸö´óÔӻⰡ£¬°ÑºÜ¶àÒÔǰдÔÚAppDelegateÀïµÄ¶«Î÷¶¼¶ªÔÚÀïÃæÁË¡£ºÁÎÞÓÅÑÅ¿ÉÑÔ¡£

µÄÈ·ÊÇÕâÑùµÄ£¬¸Ð¾õûÓиüºÃµÄ°ì·¨ÁË¡£

¼ÈÈ»ÒѾ­ÕâÑùÁË¡£ÎÒÃǿɲ»¿ÉÒԴ󵨵ØÉèÏëһϣºÃ¿¸ö¿ª·¢Õß¿ª·¢×Ô¼º¸ºÔðµÄÒµÎñ×é¼þµÄʱºò²»ÐèÒª¹ØÐÄÖ÷App¡£

ÒòΪÎÒÖªµÀÃÀÍŵÄ×é¼þ»¯¿ª·¢±ØÐëÒÀÀµÖ÷AppµÄAppDelegateµÄÒ»´ó¶ÑÉèÖúͳõʼ»¯¡£ËùÒԸɴàËûÃǾÍÖ±½ÓÔÚÖ÷AppÖм¯³Éµ÷ÊÔ£¬ËûÃÇͨ¹ý¶þ½øÖÆ»¯ºÍÈ¥PodÒÀÀµ»¯µÄ·½Ê½ÈÃÖ÷AppµÄ¹¹½¨·Ç³£¿ì¡£

ËùÒÔÎÒÃÇÊDz»ÊÇ¿ÉÒÔ¼ÌÐøÎÛȾÕâ¸öPBBasicProviderModule¡£²»ÐèÒªÔÚÖ÷AppÏîÄ¿ÀïµÄAppDelegateдÈκγõʼ»¯´úÂ룿»ù±¾»òÕß¾¡Á¿²»ÔÚÖ÷AppÀïдÈκδúÂ룿¸ÄÒÀÀµÖ÷App±äΪÒÀÀµÕâ¸öÈõÒµÎñ×é¼þ£¿

°´ÕÕÕâ¸ö˼·ÎÒÃǰá¿ÕÁËAppDelegateÀïµÄËùÓдúÂë¡£±ÈÈçһЩ³õʼ»¯AppÑùʽµÄ¶«Î÷¡¢³õʼ»¯RootViewControllerµÈµÈÕâЩ¶¼¿ÉÒÔ°áµ½Ò»¸öеÄÈõÒµÎñ×é¼þÀï¡£

¶øÒµÎñ×é¼þÆäʵ¸ù±¾²»Ðè¹ØÐÄÕâ¸öÈõÒµÎñ×é¼þ£¬¿ª·¢ÈËÔ±Ö»ÐèÒªÔÚÒµÎñ×é¼þÖеÄExample AppÖеÄAppDelegateÖгõʼ»¯×Ô¼ºÒµÎñ×é¼þµÄRootViewController¾ÍºÃÁË¡£

ÆäËûµÄÊÂÇé½»¸øÕâ¸öеÄÈõÒµÎñ×é¼þ¾ÍºÃÁË¡£¶øÖ÷AppºÍExample AppÖ»ÒªÔÚPodfileÖÐÒÀÀµËü¾ÍºÃÁË¡£

ËùÒÔ×îºóµÄÉèÏë¾ÍÊÇ£º¿ª·¢Õß²»»áÈ¥¸ÄÖ÷AppÏîÄ¿£¬Ò²²»ÐèÒªÖªµÀÖ÷AppÏîÄ¿¡£¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£¬Ö÷AppºÍÒµÎñ×é¼þÖ®¼äÊǸô¾øµÄ¡£

ÓÐÒ»¸ö¸ü´óµÄºÃ´¦£¬ÎÒÖ»Òª¸ü»»Õâ¸öÈõÒµÎñ×é¼þ£¬Õâ¸öÒµÎñ×é¼þ¾ÍÄÜÂíÉÏÊÊÅäÒ»¸öÐÂApp¡£ÕâÒ²ÊÇijÖÖÒâÒåÉϵĽâñî¡£

Debug/Release

˭˵²»ÓÃÔÚÖ÷AppÀïµÄAppDelegateдÈκδúÂëµÄ£¬´òÁ³¡£¡£¡£

ÎÒÃÇÔÚ¶Ô¶þ½øÖÆPod¿âÅܲâÊԵķ¢ÏÖ£¬Ô´ÂëÄܹý£¬¶þ½øÖÆ(.a)²»Äܹý¡£°Ù˼²»µÃÆä½â£¬È»ºó×Ðϸ²é¿´´úÂ룬·¢ÏÖÊÇÕâ¸öºêµÄ¹ø£º

#ifdef DEBUG

#endif

DEBUGÔÚ±àÒë½×¶Î¾ÍÒѾ­¾ö¶¨ÁË¡£¶þ½øÖÆ»¯µÄʱºòÒѾ­±àÒëÍê³ÉÁË¡£ ¶øÎÒÃǵĴúÂëÖгäÂú×Å#ifdef DEBUG ¾ÍÕâÑùÕâÑù¡£ÄÇÔõô°ì£¬ÕâÊǶþ½øÖÆ»¯µÄ¹ø¡£µ«ÊÇÎÒÃǵĶþ½øÖÆ»¯ÒѾ­ÐγÉÁ˱ê×¼£¬´ó¼Ò¶¼×Ô¾õ»áÕâô×ö£¬Ôõô½â¾öÕâ¸öÎÊÌâÄØ¡£

½â¾ö·½°¸ÊÇ£º

´´½¨ÁËÒ»¸öPBEnvironmentProvider¡£´ó¼Ò¶¼È¥ÒÀÀµËü¡£

È»ºóÔ­À´ÅжϺêµÄ´úÂë¸Ä³ÉÕâÑù£º

if([PBEnvironmentProvider testing])
{
//...
}

ÔÚÖ÷AppµÄAppDelegateÖÐÕâÑù£º

#if DEBUG && TESTING
//PBEnvironmentProviderÌṩµÄºê
CONFIG_ENVIRONMENT_TESTING
#endif

Ô­ÀíÊÇ£ºÈç¹ûAppDelegateÓÐij¸ö·½·¨£¨CONFIG_ENVIRONMENT_TESTINGºê»áÌṩÕâ¸ö·½·¨£©£¬[PBEnvironmentProvider testing]µÃµ½µÄ½á¹û¾ÍÊÇYES¡£

ΪʲôҪдÔÚÖ÷AppÀïÄØ£¿ÆäʵҲ¿ÉÒÔ¶ªÔÚPBBasicProviderModuleÀïÃæ£¬Ìṩһ¸ö·½·¨°¡¡£

ÒòΪÖ÷AppµÄAppDelegate.mÊÇÔ´Â룬δ¾­±àÒë¡£ÁíÍâ×¢ÒâTESTINGÕâ¸öºê¡£ÎÒÃÇ¿ÉÒÔÔÚxcodeÉèÖÃÀï¼ÓÒ»¸ömacro²ÎÊýTESTING£¬²¢ÇÒÐÞ¸ÄΪ0µÄÇé¿öÏ£¬Äܹ»Éú³ÉÒ»¸öʵ¼ÊÊÇDEBUGµÄAppµ«ÀïÃæÄÚÈÝÈ´ÊÇÏßÉϵÄÄÚÈÝ¡£

Õâ¸öÐèÇóÊÇÀ´×ÔÓÚÎÒÃǾ­³£ÐèÒª½ô¼±Í¨¹ýxcodeÖ±½ÓbuildÒ»¸öappµ½ÊÖ»úÉÏÒÔ½â¾ö»òÈ·ÈÏÏßÉϵÄÎÊÌâ¡£

ËäÈ»´òÁ³ÁË£¬µ«ÊÇÒ²»¹ºÃ£¬ÒÔºóÒ²²»ÓøÄÁË¡£ÔÙ˵Õâ¸öÊÇÌØÊâÐèÇó¡£³ýÁËÕâ¸öÖ®Í⣬Ö÷AppûÓÐÆäËû´úÂëÁË¡£

ÒµÎñ×é¼þ¼äͨÐÅ

ÎÒÃǽâ¾öÁ˳õʼ»¯ºÍ½âñîµÄÎÊÌâ¡£½ÓÏÂÀ´Ö»Òª½â¾ö×é¼þ¼äͨÐŵÄÎÊÌâ¾ÍºÃÁË¡£

È»ºóÎÒÕÒÁ˼¸¸öµÚÈý·½¿â£¬Ñ¡ÓÃÁË MGJRouter ¡£±¾À´Ö±½ÓÒÀÀµËü¾ÍºÃÁË¡£

ºóÀ´¾õµÃ¶¼Ê¹ÓÃBlockµÄ·½Ê½»áµ¼ÖÂÕâÑùµÄ´úÂ룬ȫ²¿¶ÑÔÚÁËÒ»¸ö·½·¨À

+ (void) setupRouter
{
......
[MGJRouter registerURLPattern:@"mgj://foo/a" toHandler:^(NSDictionary *routerParameters) {
NSLog(@"routerParameterUserInfo:%@", routerParameters[MGJRouterParameterUserInfo]);
}];
[MGJRouter registerURLPattern:@"mgj://foo/b" toHandler:^(NSDictionary *routerParameters) {
NSLog(@"routerParameterUserInfo:%@", routerParameters[MGJRouterParameterUserInfo]);
}];
......
}

ÕâÑù¸Ð¾õºÜ²»Ë¬¡£ÄÇÎҸɴà¾Í°ÑMGJRouter´úÂë¸´ÖÆÁËÏÂÀ´£¬°ÑBlock¸Ä³ÉÁË@selector¡£²¢ÇÒ°ÑËüÖ±½Ó¼ÓÈëÁË YTXModule ÀïÃæ¡£²¢ÇÒʹÓÃÁ˺꣬Èýá¹û¿´ÆðÀ´ÓÅÑÅЩ¡£´úÂë¿´ÆðÀ´ÊÇÕâÑùµÄ£º

//ÔÚij¸öÀàµÄ.mÀÆäʵ²¢²»ÐèÒª¼Ì³ÐYTXModuleÒ²¿ÉÒÔʹÓøù¦ÄÜ
YTXMODULE_EXTERN_ROUTER_OBJECT_METHOD(@"object1")
{
YTXMODULE_EXAPAND_PARAMETERS(parameters)
NSLog(@"%@ %@", userInfo, completion);
isCallRouterObjectMacro2 = YES;
return @"ÎÒÊǸöÀàÐÍ";
}

YTXMODULE_EXTERN_ROUTER_METHOD(@"YTX://QUERY/:query")
{
YTXMODULE_EXAPAND_PARAMETERS(parameters)
NSLog(@"%@ %@", userInfo, completion);
testQueryStringQueryValue = parameters[@"query"];;
testQueryStringNameValue = parameters[@"name"];
testQueryStringAgeValue = parameters[@"age"];
}

µ÷ÓõÄʱºò¿´ÆðÀ´ÊÇÕâÑùµÄ£º

[YTXModule openURL:@"YTX://QUERY/query?age=18&name=CJ" withUserInfo:@{@"Test":@1} completion:nil];

NSString * testObject2 = [YTXModule objectForURL:@"object1" withUserInfo:@{@"Test":@2}];

ͨÐÅÎÊÌâ½â¾öÁË¡£ÆäÊµÒ³ÃæÌø×ªÎÊÌâÒ²½â¾öÁË¡£

Ò³ÃæÌø×ª

Ò³ÃæÌø×ª½â¾ö·½°¸ÓëÒµÎñ×é¼þÖ®¼äͨÐÅÎÊÌâÊÇÒ»ÑùµÄ¡£

µ«ÊÇÐèҪעÒâµÄÊÇ£¬ÄãÒ»¸öÒµÎñ×é¼þÄÚ²¿µÄÒ³ÃæÌø×ªÒ²ÇëʹÓÃURL+RouterµÄ·½Ê½Ìø×ª£¬¶ø²»Òª×Ô¼ºÖ±½ÓpushViewController¡£

ÕâÑùµÄºÃ´¦ÊÇ£ºÈç¹û½«À´Ä³Ð©ÄÚ²¿Ìø×ªÒ³ÃæÐèÒª¸øÆäËûÒµÎñ×é¼þµ÷Óã¬Äã¾Í²»ÐèÒªÔÙ×¢²á¸öURLÁË¡£ÒòΪ±¾À´¾ÍÓС£

ÊÇ·ñÈ¥Model»¯

È¥Model»¯Ö÷ÒªÌåÏÖÔÚÒµÎñ×é¼þ¼äͨÐÅ£¬Òª²»Òª´«Ò»¸öModel¹ýÈ¥(´«¹ýÈ¥µÄDictionaryÖеÄij¸ö¼üÊÇModel)¡£

Èç¹ûÈ¥Model»¯£¬Õâ¸öÒµÎñ×é¼þµÄ¿ª·¢ÕßÈçºÎÈ·¶¨DictionaryÀïÃæÓÐÄÄЩÄÚÈÝ·Ö±ðÊÇʲôÀàÐÍÄØ£¿ÄÇÐèÒªÓиöµØ·½´«²¥ÕâЩÐÅÏ¢£¬±ÈÈçдÔÚÍ·Îļþ£¬wikiµÈµÈ¡£

Èç¹û²»È¥Model»¯µÄ»°£¬¾ÍÐèÒª°ÑÕâ¸öModel×ö³ÉPod¿â¡£Á½¸öÒµÎñ×é¼þ¶¼È¥ÒÀÀµËü¡£

×îºó¾ö¶¨²»È¥Model¡£ÒòΪʵ¼ÊÉÏÓÐһЩModel¾ÍÊÇÔÚ¸÷¸öÒµÎñ×é¼þÖ®¼ä¹«Óõ썱ÈÈçUser£©£¬ËùÒԿ϶¨¾Í»áÓÐModel×ö³ÉPod¿â¡£ÎÒÃÇ¿ÉÒÔ°ÑËü×ö³ÉÖØModel£¬ModelÀï¿ÉÒÔ´øÍøÂçÇëÇóºÍ±¾µØ´æ´¢µÄ·½·¨¡£Î¨Ò»²»ÄܱÜÃâµÄÎÊÌâÊÇ£¬Á½¸öÒµÎñ×é¼þµÄ¿ª·¢Õß¶¼ÓпÉÄÜÈ¥¸ÄÕâ¸öModelµÄPod¿â¡£

ÐÅÏ¢µÄÅû¶

Ìø×ªµÄÒ³ÃæÐèÒª´«ÄÄЩ²ÎÊý£¿ ÒµÎñ×é¼þÖ®¼ä´«µÝÊý¾Ýʱºò±¾ÖʵÄÔØÌåÊÇʲô£¿

²»Í¬ÒµÎñ¿ª·¢ÕßÈçºÎÖªÏþÕâЩÐÅÏ¢¡£

ʹÓÃÈ¥Model»¯ºÍ²»Ê¹ÓÃÈ¥Model»¯£¬ÎÒÃǶ¼Óи÷×Եķ½°¸¡£

È¥Model»¯£¬ÔòÅû¶ͷÎļþ£¬ÔÚÍ·ÎļþÀïÃæÐ´ÏêϸµÄ×¢ÊÍ¡£

Èç¹û²»È¥Model»¯£¬Ôò¾Í¿´Model¾Í¿ÉÒÔÁË¡£ÈçÓÐÌØÊâÇé¿ö£¬ÄÇÒ²ÊÇÎĵµÐ´ÔÚÍ·ÎļþÄÚ¡£

×ܽáµÄ»°£ºÐÅÏ¢Åû¶µÄ·½Ê½¾ÍÊǰÑ×¢ÊÍÎĵµÐ´ÔÚÍ·ÎļþÄÚ¡£

×é¼þµÄÉúÃüÖÜÆÚ

ÒµÎñ×é¼þµÄÉúÃüÖÜÆÚºÍAppÒ»Ñù¡£Ëü±¾Éí¾ÍÊǸöÀֻ࣬±©Â¶Àà·½·¨£¬²»´æÔÚÐèҪʵÀý£¬ËùÒÔÆäʵ²»´æÔÚÉúÃüÖÜÆÚÕâ¸ö¸ÅÄî¡£¶øËü¿ÉÒÔʹÓÃÀà·½·¨´´½¨ºÜ¶àViewController£¬ViewControllerµÄÉúÃüÖÜÆÚÓÉApp¹ÜÀí¡£ÄÄÅÂÕâЩViewControllerÖ®¼äÐèҪͨÐÅ£¬ÄãÒ²¿ÉÒÔʹÓÃBus/YTXModule/ЭÒéµÈµÈ·½Ê½À´×ö£¬¶ø²»Ó¦¸ÃÈÃÒµÎñ×é¼þÕâ¸öÀàÀ´¸ºÔðËûÃÇÖ®¼äµÄͨÐÅ£»Ò²²»Ó¦¸Ã×Ô¼º³ÖÓÐViewController£»ÕâÑùÔö¼ÓÁËñîºÏ¡£

ÈõÒµÎñ×é¼þµÄÉúÃüÖÜÆÚÓÉ´´½¨ËüµÄ¶ÔÏóÀ´¹ÜÀí¡£°´Ðè´´½¨ºÍARC×Ô¶¯ÊÍ·Å¡£

»ù´¡¹¦ÄÜ×é¼þºÍµÚÈý·½µÄÉúÃüÖÜÆÚÓÉ´´½¨ËüµÄ¶ÔÏóÀ´¹ÜÀí¡£°´Ðè´´½¨ºÍARC×Ô¶¯ÊÍ·Å¡£

°æ±¾¹æ·¶

ÎÒÃÇ×Ô¼º¶¨µÄ¹æÔò¡£

ËùÓÐPod¿â¶¼Ö»ÒÀÀµµ½minor

"~> 2.3"

Ö÷AppÖо«È·ÒÀÀµµ½patch

"2.3.1"

Ö÷AppÖеÄÒµÎñ×é¼þ°æ±¾ºÅµÄMain.MinorÒªºÍÖ÷App°æ±¾±£³ÖÒ»Ö¡£

²Î¿¼£º Semantic Versioning RubyGems Versioning Policies

¶þ½øÖÆ»¯

¶þ½øÖÆ»¯ÎÒÈÏΪÊDZØÐëµÄ£¬Äܹ»¼Ó¿ì¿ª·¢ËÙ¶È¡£

¶øÎÒʹÓõÄÕâ¸ö ¶þ½øÖÆ·½°¸

Óиö¿Ó¾ÍÊÇÔÚgitlab-runnerÉÏÔÚ¶þ½øÖƺÍÔ´ÂëÇл»Ê±£¬¾­³£ÐèÒªpod cache clean --all£¬test/lint/publish²ÅÄܳɹ¦¡£¶øÃ¿´Îpod cache clean --allÖ®ºóCocoaPods»áÈ¥ÖØÐÂÏÂÔØÏà¹ØµÄpod¿â£¬Ôö¼ÓÁËʱ¼äºÍ²»±ØÒªµÄ¿ªÏú¡£

ÎÒÃÇÏÖÔÚͨ¹ýpodspecÖÐÔö¼Ópreserve_pathsºÍÖ´ÐÐdownload_zip.sh½â¾öÁËcacheµÄÎÊÌâ¡£Ô­ÀíÊÇÈÃpod cache¼ÈÓÐÔ´ÂëÓÖÓжþ½øÖÆ.a¡£¾ßÌå¿ÉÒÔ¿´ytx-pod-templateÏîÄ¿ÖÐµÄ Name.podspec ºÍ download_zip.sh ¡£

¶þ½øÖÆ»¯»¹µÃ×¢ÒâºêµÄÎÊÌ⡣СÐÄʹÓú꣬ÓÈÆäÊÇ#ifdef¡£±ÜÃâÔ´ÂëºÍ¶þ½øÖÆ´úÂëÔËÐеĽá¹û²»Ò»Ñù¡£

¼¯³Éµ÷ÊÔ

¼¯³Éµ÷ÊԺܼòµ¥¡£Ã¿Ò»¸öÒµÎñ×é¼þÔÚ×Ô¼ºµÄExample AppÖе÷ÊÔ¡£

Õâ¸öÒµÎñ×é¼þµÄpodspecֻҪдÇå³þ×Ô¼ºÒÀÀµµÄ¿âÓÐÄÄЩ¡£Ê£ÏÂµÄÆäËûÒµÎñ×é¼þÓ¦¸ÃдÔÚExample AppµÄPodfileÀïÃæ¡£

ÒÀÀµµÄPod¿â¶¼ÊǶþ½øÖƵġ£ÈçÓÐÎÊÌâ¿ÉÒÔ×°Ô´Âë(IS_SOURCE=1 pod install)À´µ÷ÊÔ¡£

¿ª·¢ÈËÔ±ÆäʵֻÐèÒª¹ØÐÄ×Ô¼ºµÄÒµÎñ×é¼þ£¬Õâ¸öÒµÎñ×é¼þÊÇ×ÔÇ¢µÄ¡£

¹«¹²¿âË­À´Î¬»¤µÄÎÊÌâ

Õâ¸öÎÊÌâÔÚÎÒÃÇÕâÖÖСTeam²»´æÔÚ¡£Ã»ÓÐ×ÐϸµØÈ¥Ïë¹ý¡£µ«ÊÇÖ»Òª×öºÃ´úÂë×¼È루Test/Lint/Code Review£©ºÍȨÏÞ¹ÜÀí¾ÍÓ¦¸Ã²»»á´æÔÚ´óµÄÎÊÌâ¡£

µ¥Ôª²âÊÔ

µ¥Ôª²âÊÔÎÒÃÇÓõÄÊÇ Kiwi ¡£ ½áºÏMVVMģʽ£¬¶Ôÿһ¸öÒµÎñ×é¼þµÄViewModel¶¼½øÐе¥Ôª²âÊÔ¡£Ã¿´Îpush´úÂ룬gitlab-runner¶¼»á×Ô¶¯ÅܲâÊÔ¡£Ò»µ©¿ª·¢ÈËÔ±·¢ÏÖ²âÊÔ¹ÒÁ˾ÍÄܹ»¼°Ê±ÕÒµ½ÎÊÌâ¡£Ò²¿ÉÒÔºÜÈÝÒ×µÄ×·ËÝÄÄ´ÎÌá½»°Ñ²âÊÔÅܹÒÁË¡£

ÕâÒ²ÊÇÎÒÃÇÍŶӵÄÇ¿ÖÆÒªÇó¡£Ã»ÓвâÊÔ£¬²âÊÔдµÄ²»ºÃ£¬²âÊÔ¹ÒÁË£¬Ö±½Ó¾Ü¾ømerge request¡£

lint

¶Ôÿһ¸ö×é¼þ½øÐÐlintÔÙ·¢²¼£¬±£Ö¤ÁËÕýÈ·ÐÔ¡£ÕâÒ²ÊÇÒ»²½Ç¿ÖÆÒªÇó¡£

lintµÄʱºòÄܹ»·¢ÏֺܶàÎÊÌ⡣ͨ³£Çé¿öϲ»ÔÊÐíwarning³öÏֵġ£Èç¹û²»ÄܱÜÃ⣨±ÈÈçµÚÈý·½£©ÇëÓÃ--allow-warnings¡£

pod lib lint --sources=<span class="variable" style="color:rgb(0,128,128);">$SOURCES</span> --verbose --fail-fast --<span class="keyword" style="font-weight:bold;">use</span>-libraries

ͳһµÄÍøÂç·þÎñºÍ±¾µØ´æ´¢·½Ê½

Õâ¸ö¾ÍºÜ¼òµ¥¡£°ÑÕâÁ½¸ö²¿·Ö³éÏó³É¼¸¸öPod¿â¹©ËùÓÐÒµÎñ×é¼þʹÓþͺÃÁË¡£ ÎÒÃÇÕâ±ß·Ö±ðÊÇÈý¸öPod¿â£º

YTXRequest

YTXRestfulModel

NSUserDefault+YTX

ÆäËûһЩÄÚÈÝ

ignoreÁËÖ÷AppÖеÄPodfile.lock¾¡Á¿±ÜÃâ³åÍ»¡£

Ö÷App ArchiveµÄʱºòҪʹÓÃÔ´Â룬¶ø²»ÊǶþ½øÖÆ¡£

ºóÆÚ¿ÉÒÔʹÓÃoclintºÍdeploymate¼ì²é´úÂë¡£

ʹÓÃfastlane matchȥά»¤¿ª·¢Ö¤Êé¡£

һЩÐèÒª´Óplist»òÕßjson¶ÁÈ¡ÅäÖõÄPod¿âÄ£¿é£¬Òª×¢Òâ¶Á³öÀ´µÄÄÚÈÝ×îºÃÒª¼ÓÒ»¸önamespace¡£namespace¿ÉÒÔÊÇÕâ¸öÒµÎñ×é¼þµÄÃû×Ö¡£

ÒµÎñ×é¼þ¶ÁÈ¡×ÊÔ´ÎļþµÄÇø±ð

#´Ómain bundleÖÐÈ¡¡£Èç¹ûͼƬϣÍûÔÚstoryboardÖб»ÕÒµ½£¬Ê¹ÓÃÕâÖÖ·½Ê½¡£
s.resource = ["#{s.name}/Assets/**"]

#Ö»ÊÇÏ£ÍûÔÚÎÒÕâ¸öÒµÎñ×é¼þµÄbundleÄÚʹÓõÄplist¡£×÷ΪÅäÖÃÎļþ¡£ÕâÊǹٷ½ÍƼö·½Ê½¡£
s.resource_bundles = {
"{s.name}/" => ["{s.name}/Assets/config.plist"]
}

³ÖÐø¼¯³É

Ô­À´µÄApp¾ÍÊdzÖÐø¼¯³ÉµÄ¡£Ï뵱ȻµÄ£¬ÎÒÃÇÏ£ÍûеÄ×é¼þ»¯¿ª·¢µÄAppÒ²Äܹ»³ÖÐø¼¯³É¡£

PodfileÓ¦¸ÃÊÇÕâÑùµÄ£ºÕâÀïÃæ³öÏÖµÄÈ«ÊÇ˽ÓÐPod¿â¡£

pod 'YTXRequest', '2.0.1'
pod 'YTXUtilCategory', '1.6.0'

pod 'PBBasicProviderModule', '0.2.1'
pod 'PBBasicChartAndSocketModule', '0.3.1'
pod 'PBBasicAppInitModule', '0.5.1'
...

pod 'PBBasicHomepageBusinessModule', '1.2.15'
pod 'PBBasicMeBusinessModule', '1.2.10'
pod 'PBBasicLiveBusinessModule', '1.2.1'
pod 'PBBasicChartBusinessModule', '1.2.6'
pod 'PBBasicTradeBusinessModule', '1.2.7'

Èç¹ûPodÒÀÀµµÄ¶«Î÷ÌØ±ðÌØ±ð¶à£¬±ÈÈç100¶à¸ö¡£ÁíÍâÓÖ±ØÐëÒÀÀµÖ÷App×ö¼¯³Éµ÷ÊÔ¡£ ÄãÒ²¿ÉÒÔÓÃÕâÖÖ·½°¸£º°ÑÄãËùÓеÄPod¿âµÄÒÀÀµ¶¼Õ¹¿ªÐ´µ½Ö÷AppµÄPodfileÖС£¶ø·¢²¼Pod¿âʱpodspecÖв»´øÈκεÄÒÀÀµµÄ¡£ÕâÑù¾Í±ÜÃâÁËpod installµÄʱºò½âÎöÒÀÀµÌرðºÄʱµÄÎÊÌâ¡£

¸÷¸ö½Å±¾¶¼ÔÚÕâ¸ö ytx-pod-template ¡£ÏÈ´Ó.gitlab-ci.yml¿´Æð¡£

ÎÒÃdzÖÐø¼¯³ÉµÄ¹¤¾ßÊÇgitlab runner¡£

³ÖÐø¼¯³ÉµÄÕû¸öÁ÷³ÌÊÇ£º

µÚÒ»²½£º

ʹÓÃtemplate´´½¨Pod¡£ÏñÕâÑù£º

pod lib create <Pod¿âÃû³Æ> --template-url="http://gitlab.baidao.com/pods/ytx-pod-template"

µÚ¶þ²½£º

´´½¨dev·ÖÖ§¡£ÓÃÀ´¿ª·¢¡£

µÚÈý²½£º

ÿ´Îpush devµÄʱºò»á´¥·¢runner×Ô¶¯ÅÜStage: Init Lint(ÖеÄtest)

µÚËIJ½£º

1.×¼±¸·¢²¼Pod¿â¡£ÐÞ¸ÄpodspecµÄ°æ±¾ºÅ£¬´òÉÏÏàÓ¦tag¡£ 2.ʹÓÃmerge_request.shÏòmasterÌá½»Ò»¸ömerge request¡£

µÚÎå²½£º

1.ÆäËûÓÐȨÏÞ¿ª·¢Õßcode reviewÖ®ºó£¬½ÓÊÜmerge request¡£ 2.masterºÏ²¢Õâ¸ömerge request 3.master´¥·¢runner×Ô¶¯ÅÜStage: Init Package Lint ReleasePod UpdateApp

µÚÁù²½£º

Èç¹ûµÚÎå²½ÕýÈ·¡£Ö÷AppµÄdev·ÖÖ§»áÊÕµ½Ò»¸ömerge request£¬ÀïÃæµÄÄÚÈÝÊÇÐÞ¸ÄPodfile¡£ ͼÖÐÄÚÈݳöÏÖÁËAFNetworkingµÈÊÇÒòΪÕâ¸öʱºòÔÚ×ö²âÊÔ¡£

µÚÆß²½£º

Ö÷App´¥·¢runner£¬»á¹¹½¨Ò»¸öipa×Ô¶¯ÉÏ´«µ½ fir ¡£

Init

³õʼ»¯Ò»Ð©»·¾³¡£

´òӡһЩÐÅÏ¢¡£

Package

¶þ½øÖÆ»¯´ò°ü³É.a

Lint

Pod lib lint¡£¶þ½øÖƺÍÔ´Âë¶¼lint¡£

²âÊÔ¡£

ÒÔºó¿¼ÂǼÓÈëoclintºÍdeploymate¡£

ReleasePod

°ÑÏà¹ØÎļþzipºó£¬´«µ½¾²Ì¬·þÎñÆ÷¿â¡£ÒÔÌṩ¶þ½øÖÆ»¯ÏÂÔØ°ü¡£

pod repo push¡£·¢²¼¸ÃPod¿â¡£

ReleasePodµÄʱºò²»ÔÊÐíPod¿â³öÏÖ¾¯¸æ¡£

UpdateApp

ÏÂÔØApp´úÂë

ÐÞ¸ÄPodfileÎļþ¡£Èç¹ûÆ¥Åäµ½pod¿âÎļþÃûÔòÐ޸쬷ñÔòÌí¼Ó¡£

Éú³ÉÒ»¸ömerge requestµ½Ö÷AppµÄdev·ÖÖ§¡£

¹ØÓÚgitlab runner¡£

stageÕâ¸ö¹¦Äܷdz£µÄÀ÷º¦¡£Ç¿ÁÒÍÆ¼ö¡£

ÿһ¸östage¿ÉÒÔÅÜÔÚ²»Í¬µÄrunnerÉÏ¡£Ã¿Ò»¸östageʧ°ÜÁË¿ÉÒÔµ¥¶Àretry¡£¶øÄ³Ò»¸östageÀïÃæµÄÈÎÎñ¿ÉÒÔ²¢ÐÐÖ´ÐУº(testºÍlint¾ÍÊDz¢ÐеÄ)

   
1819 ´Îä¯ÀÀ       49
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì