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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS·ûºÅ±í»Ö¸´&ÄæÏòÖ§¸¶±¦
 
À´Ô´£ºiOS¿ª·¢byÌÆÇÉ ·¢²¼ÓÚ£º 2017-2-21
  3042  次浏览      29
 

ÍÆ¼öÐò

±¾ÎĽéÉÜÁ˻ָ´·ûºÅ±íµÄ¼¼ÇÉ£¬²¢ÇÒÀûÓøü¼ÇÉʵÏÖÁËÔÚ Xcode ÖжÔÄ¿±ê³ÌÐòÏ·ûºÅ¶Ïµãµ÷ÊÔ£¬¸Ã¼¼ÇÉ¿ÉÒÔÏÔÖøµØ¼õÉÙÄæÏò·ÖÎöʱ¼ä¡£ÔÚÎÄÕµÄ×îºó£¬×÷ÕßÒÔÖ§¸¶±¦ÎªÀý£¬Õ¹Ê¾³öͨ¹ýÔÚ UIAlertView µÄ show ·½·¨´¦Ï¶ϵ㣬´Ó¶ø»ñµÃÖ§¸¶±¦µÄµ÷ÓÃÕ»µÄ¹ý³Ì¡£

±¾ÎÄÉæ¼°µÄ´úÂëÒ²¿ªÔ´ÔÚ£ºhttps://github.com/tobefuturer/restore-symbol£¬»¶Ó­ Star ºÍÌá Issue¡£¸Ðл×÷ÕßÊÚȨ·¢±í¡£

×÷Õß½éÉÜ£ºÑî¾ý£¬ÖÐɽ´óѧ¼ÆËã»úϵÑо¿Éú£¬iOS ¿ª·¢Õߣ¬Éó¤ÁìÓò iOS °²È«ºÍÄæÏò¹¤³Ì£¬¸öÈ˲©¿Í£ºhttp://blog.imjun.net ¡£

ǰÑÔ

·ûºÅ±íÀúÀ´ÊÇÄæÏò¹¤³ÌÖÐµÄ ¡°±ØÕùÖ®µØ¡±£¬¶ø iOS Ó¦ÓÃÔÚÉÏÏßǰ¶¼»á²ÃÈ¥·ûºÅ±í£¬ÒÔ±ÜÃâ±»ÄæÏò·ÖÎö¡£

±¾ÎÄ»á½éÉÜÒ»¸ö×Ô¼ºÐ´µÄ¹¤¾ß£¬ÓÃÓÚ»Ö¸´ iOS Ó¦ÓõķûºÅ±í¡£

Ö±½Ó¿´Ð§¹û , Ö§¸¶±¦»Ö¸´·ûºÅ±íºóµÄÑù×Ó:

ÎÄÕÂÓе㳤£¬ÇëÄÍÐÄ¿´µ½×îºó£¬ÁÁµãÔÚ×îºó¡£

ΪʲôҪ»Ö¸´·ûºÅ±í

ÄæÏò¹¤³ÌÖУ¬µ÷ÊÔÆ÷µÄ¶¯Ì¬·ÖÎöÊDZز»¿ÉÉٵ쬶ø Xcode + lldb ȷʵÊǷdz£ºÃµÄµ÷ÊÔÀûÆ÷ , ±ÈÈçÎÒÃÇÔÚ Xcode Àï¿ÉÒԺܷ½±ãµÄ²é¿´µ÷ÓöÑÕ»£¬ÈçÉÏÃæÄÇÕÅͼ¿ÉÒÔºÜÇåÎúµÄ¿´µ½Ö§¸¶±¦µÇ¼µÄ RPC µ÷Óùý³Ì¡£

ʵ¼ÊÉÏ£¬Èç¹ûÎÒÃDz»»Ö¸´·ûºÅ±íµÄ»°£¬Äã¿´µ½µÄµ÷ÊÔÒ³ÃæÓ¦¸ÃÊÇÏÂÃæÕâ¸öÑù×Ó£º

ͬһ¸öº¯Êýµ÷Óùý³Ì£¬Xcode µÄÏÔʾ¼òÖ±Ìì²îµØ±ð¡£

Ô­ÒòÊÇ£¬Xcode ÏÔʾµ÷ÓöÑÕ»ÖзûºÅʱ£¬Ö»»áÏÔʾ·ûºÅ±íÖÐÓеķûºÅ¡£ÎªÁËÎÒÃǵ÷ÊÔ¹ý³ÌµÄ˳Àû£¬ÎÒÃÇÓбØÒª°Ñ¿ÉÖ´ÐÐÎļþÖеķûºÅ±í»Ö¸´»ØÀ´¡£

·ûºÅ±íÊÇʲô

ÎÒÃÇÒª»Ö¸´·ûºÅ±í£¬Ê×ÏÈÒªÖªµÀ·ûºÅ±íÊÇʲô£¬ËûÊÇÔõô´æÔÚÓÚ Mach-O ÎļþÖеġ£

·ûºÅ±í´¢´æÔÚ Mach-O ÎļþµÄ __LINKEDIT ¶ÎÖУ¬Éæ¼°ÆäÖеķûºÅ±í(Symbol Table)ºÍ×Ö·û´®±í(String Table)¡£

ÕâÀïÎÒÃÇÓà MachOView ´ò¿ªÖ§¸¶±¦µÄ¿ÉÖ´ÐÐÎļþ£¬ÕÒµ½ÆäÖÐµÄ Symbol Table Ïî¡£

·ûºÅ±íµÄ½á¹¹ÊÇÒ»¸öÁ¬ÐøµÄÁÐ±í£¬ÆäÖеÄÿһÏî¶¼ÊÇÒ»¸ö struct nlist¡£

//  λÓÚϵͳ¿â <macho-o/nlist.h> Í·ÎļþÖÐ 
struct nlist {
union {
// ·ûºÅÃûÔÚ×Ö·û´®±íÖÐµÄÆ«ÒÆÁ¿
uint32_t n_strx;
} n_un;
uint8_t n_type;
uint8_t n_sect;
int16_t n_desc;
// ·ûºÅÔÚÄÚ´æÖеĵØÖ·£¬ÀàËÆÓÚº¯ÊýÖ¸Õë
uint32_t n_value;
};

ÕâÀïÖØµã¹Ø×¢µÚÒ»ÏîºÍ×îºóÒ»ÏµÚÒ»ÏîÊÇ·ûºÅÃûÔÚ×Ö·û´®±íÖÐµÄÆ«ÒÆÁ¿£¬ÓÃÓÚ±íʾº¯ÊýÃû£¬×îºóÒ»ÏîÊÇ·ûºÅÔÚÄÚ´æÖеĵØÖ·£¬ÀàËÆÓÚº¯ÊýÖ¸Õë(ÕâÀïֻ˵Ã÷´ó¸ÅµÄ½á¹¹£¬ÏêϸµÄÐÅÏ¢Çë²Î¿¼¹Ù·½ Mach O Îļþ¸ñʽµÄÎĵµ)¡£

Ò²¾ÍÊÇ˵Èç¹ûÎÒÃÇÖªµÀÁË·ûºÅÃûºÍÄÚ´æµØÖ·µÄ¶ÔÓ¦¹ØÏµ£¬ÎÒÃÇÊÇ¿ÉÒÔ¸ù¾ÝÕâ¸ö½á¹¹À´ÄæÏò¹¹Ôì³ö·ûºÅ±íÊý¾ÝµÄ¡£

ÖªµÀÁËÈçºÎ¹¹Ôì·ûºÅ±í£¬ÏÂÒ»²½¾ÍÊÇÊÕ¼¯·ûºÅÃûºÍÄÚ´æµØÖ·µÄ¶ÔÓ¦¹ØÏµÁË¡£

»ñÈ¡ OC ·½·¨µÄ·ûºÅ±í

ÒòΪ OC ÓïÑÔµÄÌØÐÔ£¬±àÒëÆ÷»á½«ÀàÃû¡¢º¯ÊýÃûµÈ±àÒë½ø×îºóµÄ¿ÉÖ´ÐÐÎļþÖУ¬ËùÒÔÎÒÃÇ¿ÉÒÔ¸ù¾Ý Mach-O ÎļþµÄ½á¹¹ÄæÏò»¹Ô­³ö¹¤³ÌÀïµÄËùÓÐÀ࣬ÕâÒ²¾ÍÊÇ´óÃû¶¦¶¦µÄÄæÏò¹¤¾ß class-dump ÁË¡£class-dump ³öÀ´µÄÍ·ÎļþÀïÊÇÓк¯ÊýµØÖ·µÄ£º

ËùÒÔÎÒÃÇÖ»Òª¶Ô class-dump µÄÔ´ÂëÉÔ×÷Ð޸쬼´¿É»ñÈ¡ÎÒÃÇÒªµÄÐÅÏ¢¡£

·ûºÅ±í»Ö¸´¹¤¾ß

ÕûÀíÍêÊý¾Ý¸ñʽ£¬ÓÖÀíÇåÁËÊý¾ÝÀ´Ô´£¬ÎÒÃǾͿÉÒÔд¹¤¾ßÁË¡£

ʵÏÖ¹ý³Ì¾Í²»Ïêϸ˵Ã÷ÁË£¬¹¤¾ß¿ªÔ´ÔÚÎÒµÄ Github ÉÏÁË£¬Á´½Ó£º

https://github.com/tobefuturer/restore-symbol

ÎÒÃÇÀ´¿´¿´ÔõôÓÃÕâ¸ö¹¤¾ß£º

1. ÏÂÔØÔ´Âë±àÒë

git clone --recursive https://github.com/tobefuturer/restore-symbol.git 
cd restore-symbol && make
./restore-symbol

2. »Ö¸´ OC µÄ·ûºÅ±í£¬·Ç³£¼òµ¥

./restore-symbol ./origin_AlipayWallet -o ./AlipayWallet_with_symbol 

origin_AlipayWallet Ϊ Clutch ÔҿǺó£¬Ã»ÓзûºÅ±íµÄ Mach-O Îļþ

-o ºóÃæ¸úÊä³öÎļþλÖÃ

3. °Ñ Mach-O ÎļþÖØÇ©Ãû´ò°ü£¬¿´Ð§¹û

Îļþ»Ö¸´·ûºÅ±íºó£¬¶à³öÁË 20M µÄ·ûºÅ±íÐÅÏ¢

Xcode Àï²é¿´µ÷ÓÃÕ»

¿ÉÒÔ¿´µ½£¬OC º¯ÊýÕⲿ·ÖµÄ·ûºÅÒѾ­»Ö¸´ÁË£¬º¯Êýµ÷ÓÃÕ»ÀïÒѾ­ÄÜ¿´³ö´óÖµĵ÷Óùý³ÌÁË£¬µ«ÊÇÖ§¸¶±¦À²ÉÓÃÁË block µÄ»Øµ÷ÐÎʽ£¬ËùÒÔ»¹ÓкܴóÒ»²¿·ÖµÄ·ûºÅûÄÜÕýÈ·ÏÔʾ¡£

ÏÂÃæÎÒÃǾÍÀ´¿´¿´ÔõôÑù»Ö¸´Õⲿ·Ö block µÄ·ûºÅ¡£

»ñÈ¡ block µÄ·ûºÅÐÅÏ¢

»¹ÊÇͬÑùµÄ˼·£¬Òª»Ö¸´ block µÄ·ûºÅÐÅÏ¢£¬ÎÒÃDZØÐëÖªµÀ block ÔÚÎļþÖеĴ¢´æÐÎʽ¡£

block ÔÚÄÚ´æÖеĽṹ

Ê×ÏÈ£¬ÎÒÃÇÏÈ·ÖÎöÏÂÔËÐÐʱ£¬block ÔÚÄÚ´æÖеĴæÔÚÐÎʽ¡£block ÔÚÄÚ´æÖÐÊÇÒÔÒ»¸ö½á¹¹ÌåµÄÐÎʽ´æÔڵ쬴óÖµĽṹÈçÏ£º

struct __block_impl {   
/**
block ÔÚÄÚ´æÖÐÒ²ÊÇÀà NSObject µÄ½á¹¹Ì壬
½á¹¹Ì忪ʼλÖÃÊÇÒ»¸ö isa Ö¸Õë
*/
Class isa;
/** ÕâÁ½¸ö±äÁ¿ÔÝʱ²»¹ØÐÄ */
int flags; int reserved;
/**
ÕæÕýµÄº¯ÊýÖ¸Õ룡£¡
*/
void (*invoke)(...);
...
}

˵Ã÷Ï block ÖÐµÄ isa Ö¸Õ룬¸ù¾Ýʵ¼ÊÇé¿ö»áÓÐÈýÖÖ²»Í¬µÄȡֵ£¬À´±íʾ²»Í¬ÀàÐ굀 block£º

_NSConcreteStackBlock

Õ»É쵀 block£¬Ò»°ã block ´´½¨Ê±ÊÇÔÚÕ»ÉÏ·ÖÅäÁËÒ»¸ö block ½á¹¹ÌåµÄ¿Õ¼ä£¬È»ºó¶ÔÆäÖÐµÄ isa µÈ±äÁ¿¸³Öµ¡£

2._NSConcreteMallocBlock

¶ÑÉ쵀 block£¬µ± block ±»¼ÓÈëµ½ GCD »òÕß±»¶ÔÏó³ÖÓÐʱ£¬½«Õ»É쵀 block ¸´ÖƵ½¶ÑÉÏ£¬´Ëʱ¸´ÖƵõ½µÄ block ÀàÐͱäΪÁË _NSConcreteMallocBlock¡£

3._NSConcreteGlobalBlock

È«¾Ö¾²Ì¬µÄ block£¬µ± block ²»ÒÀÀµÓÚÉÏÏÂÎÄ»·¾³£¬±ÈÈç²»³ÖÓÐ block ÍâµÄ±äÁ¿¡¢Ö»Ê¹Óà block ÄÚ²¿µÄ±äÁ¿µÄʱºò£¬block µÄÄÚ´æ·ÖÅä¿ÉÒÔÔÚ±àÒëÆÚ¾ÍÍê³É£¬·ÖÅäÔÚÈ«¾ÖµÄ¾²Ì¬³£Á¿Çø¡£

µÚ 2 ÖÖ block ÔÚÔËÐÐʱ²Å»á³öÏÖ£¬ÎÒÃÇÖ»¹Ø×¢ 1¡¢3 Á½ÖÖ£¬ÏÂÃæ¾Í·ÖÎöÕâÁ½ÖÖ isa Ö¸ÕëºÍ block ·ûºÅµØÖ·Ö®¼äµÄ¹ØÁª¡£

block isa Ö¸ÕëºÍ·ûºÅµØÖ·Ö®¼äµÄ¹ØÁª

·ÖÎöÕⲿ·ÖÐèÒªÓõ½ IDA Õâ¸ö·´»ã±àÈí¼þ , ÕâÀï½áºÏÁ½¸öʵ¼ÊµÄСÀý×ÓÀ´ËµÃ÷£º

1._NSConcreteStackBlock

¼ÙÉèÎÒÃǵÄÔ´´úÂëÊÇÕâÑùºÜ¼òµ¥µÄÒ»¸ö block£º

@implementation ViewController 

- (void)viewDidLoad {
int t = 2;
void (^ foo)() = ^(){
NSLog(@"%d", t); //block ÒýÓÃÁËÍⲿµÄ±äÁ¿ t
};
foo();
}

@end

±àÒëÍêºó£¬Êµ¼ÊµÄ»ã±à³¤Õâ¸öÑù×Ó£º

ʵ¼ÊÔËÐÐʱ£¬block µÄ¹¹Ôì¹ý³ÌÊÇÕâÑù£º

Ϊ block ¿ª±ÙÕ»¿Õ¼ä

Ϊ block µÄ isa Ö¸Õ븳ֵ(Ò»¶¨»áÒýÓÃÈ«¾Ö±äÁ¿£º_NSConcreteStackBlock)

»ñÈ¡º¯ÊýµØÖ·£¬¸³Öµ¸øº¯ÊýÖ¸Õë

ËùÒÔÎÒÃÇ¿ÉÒÔÕûÀí³öÕâÑùÒ»¸öÌØÕ÷£º

ÖØµãÀ´ÁË !!!

·²ÊÇ´úÂëÀïÓõ½ÁËÕ»É쵀 block£¬Ò»¶¨»á»ñÈ¡__NSConcreteStackBlock×÷Ϊ isa Ö¸Õ룬ͬʱ»á½ô½Ó×Å»ñȡһ¸öº¯ÊýµØÖ·£¬ÄǸöº¯ÊýµØÖ·¾ÍÊÇ block µÄº¯ÊýµØÖ·¡£

½áºÏÏÂÃæÕâ¸öͼ£¬×ÐϸÀí½âÉÏÃæÕâ¾ä»°

(ÕâÕÅͼºÍÉÏÃæÄÇÕÅͼÊÇͬһ¸öÎļþ£¬²»¹ý²ÃµôÁË·ûºÅ±í)

ÀûÓÃÕâ¸öÌØÕ÷£¬ÄæÏò·ÖÎöʱÎÒÃÇ¿ÉÒÔ×öÈçÏÂÍÆ¶Ï£º

ÔÚÒ»¸ö OC ·½·¨Àï·¢ÏÖÒýÓÃÁË__NSConcreteStackBlockÕâ¸ö±äÁ¿£¬ÄÇôÔÚÕ⸽½ü£¬Ò»¶¨»á³öÏÖÒ»¸öº¯ÊýµØÖ·£¬Õâ¸öº¯ÊýµØÖ·¾ÍÊÇÕâ¸ö OC ·½·¨ÀïµÄÒ»¸ö block¡£

±ÈÈçÉÏÃæÍ¼ÖУ¬ÎÒÃÇ·¢ÏÖ viewDidLoad ÀÒýÓÃÁË__NSConcreteStackBlock, ͬʱ½ô½Ó׿ÓÔØÁË sub_100049D4 µÄº¯ÊýµØÖ·£¬ÄÇÎÒÃǾͿÉÒÔÈ϶¨ sub_100049D4 ÊÇ viewDidLoad ÀïµÄÒ»¸ö block, sub_100049D4 º¯ÊýµÄ·ûºÅÃûÓ¦¸ÃÊÇ viewDidLoad_block.

2. _NSConcreteGlobalBlock

È«¾ÖµÄ¾²Ì¬ block£¬ÊÇÄÇÖÖ²»ÒýÓà block Íâ±äÁ¿µÄ block£¬ËûÒòΪ²»ÒýÓÃÍⲿ±äÁ¿£¬ËùÒÔËû¿ÉÒÔÔÚ±àÒëÆÚ¾Í½øÐÐÄÚ´æ·ÖÅä²Ù×÷£¬Ò²²»Óõ£ÐÄ block µÄ¸´ÖƵȵȲÙ×÷£¬Ëû´æÔÚÓÚ¿ÉÖ´ÐÐÎļþµÄ³£Á¿ÇøÀï¡£

²»Ì«Àí½âµÄ»°£¬¿´¸öÀý×Ó£º

ÎÒÃǰÑÔ´´úÂë¸Ä³ÉÕâÑù£º

@implementation ViewController 

- (void)viewDidLoad {

void (^ foo)() = ^(){
//block ²»ÒýÓÃÍⲿµÄ±äÁ¿
NSLog(@"%d", 123);
};
foo();
}

@end

ÄÇôÔÚ±àÒëºó»á±ä³ÉÕâÑù£º

ÄÇô½è¼øÉÏÃæµÄ˼·£¬ÔÚÄæÏò·ÖÎöµÄʱºò£¬ÎÒÃÇ¿ÉÒÔÕâÃ´ÍÆ¶Ï

ÔÚ¾²Ì¬³£Á¿Çø·¢ÏÖÒ»¸ö _NSConcreteGlobalBlock µÄÒýÓÃ

Õâ¸öµØ·½±ØÈ»´æÔÚÒ»¸ö block µÄ½á¹¹ÌåÊý¾Ý

ÔÚÕâ¸ö½á¹¹ÌåµÚ 16 ¸ö×ֽڵĵط½»á³öÏÖÒ»¸öÖµ£¬Õâ¸öÖµÊÇÒ»¸ö block µÄº¯ÊýµØÖ·

3. block µÄǶÌ׽ṹ

ʵ¼ÊÔÚʹÓÃÖУ¬¿ÉÄÜ»á³öÏÖ block ÄÚǶ block µÄÇé¿ö£º

- (void)viewDidLoad { 
dispatch_async(background_queue ,^{
...
dispatch_async(main_queue, ^{
...
});
});
}

ËùÒÔÕâÀï block ¾Í³öÏÖÁ˸¸×Ó¹ØÏµ£¬Èç¹ûÎÒÃǽ«ÕâЩ¸¸×Ó¹ØÏµÊÕ¼¯ÆðÀ´£¬¾Í¿ÉÒÔ·¢ÏÖ£¬ÕâЩ¹ØÏµ»á¹¹³ÉͼÂÛÀïµÄÉ­Áֽṹ£¬ÕâÀï¿ÉÒÔ¼òµ¥ÓõݹéµÄÉî¶ÈÓÅÏÈËÑË÷À´´¦Àí£¬Ïêϸ¹ý³Ì²»ÔÙÃèÊö¡£

block ·ûºÅ±íÌáÈ¡½Å±¾(IDA+python)

ÕûÀíÉÏÃæµÄ˼·£¬ÎÒÃÇ·¢ÏÖËÑË÷¹ý³ÌÒÀÀµÓÚ IDA Ìṩ¸÷ÖÖÒýÓÃÐÅÏ¢£¬¶ø IDA ÊÇÌṩÁ˱à³Ì½Ó¿ÚµÄ£¬¿ÉÒÔÀûÓÃÕâЩ½Ó¿ÚÀ´ÌáÈ¡ÒýÓÃÐÅÏ¢¡£

IDA ÌṩµÄÊÇ Python µÄ SDK£¬×îºóÍê³ÉµÄ½Å±¾Ò²·ÅÔÚ²Ö¿âÀï search_oc_block/ida_search_block.py (https://github.com/tobefuturer/restore-symbol/blob/master/search_oc_block/ida_search_block.py¡£

ÌáÈ¡ block ·ûºÅ±í

ÕâÀï¼òµ¥½éÉÜÏÂÔõôʹÓÃÉÏÃæÕâ¸ö½Å±¾£º

1.Óà IDA ´ò¿ªÖ§¸¶±¦µÄ Mach-O Îļþ

2.µÈ´ý·ÖÎöÍê³É! ¿ÉÄÜÒªÒ»¸öСʱ

3.Alt + F7 »òÕß ²Ëµ¥À¸ File -> Script file...

4.µÈ´ý½Å±¾ÔËÐÐÍê³É£¬Ô¤¼Æ 30s ÖÁ 60s£¬ÔËÐйý³ÌÖлáÓÐÕâÑùµÄµ¯´°

5.µ¯´°Ïûʧ¼´ block ·ûºÅ±íÌáÈ¡Íê³É

6.ÔÚ IDA ´ò¿ªÎļþµÄĿ¼Ï , »áÊä³öÒ»·ÝÃûΪblock_symbol.jsonµÄ json ¸ñʽ block ·ûºÅ±í

»Ö¸´·ûºÅ±í & ʵ¼Ê·ÖÎö

ÓÃ֮ǰµÄ·ûºÅ±í»Ö¸´¹¤¾ß£¬½« block µÄ·ûºÅ±íµ¼Èë Mach-O Îļþ

./restore-symbol ./origin_AlipayWallet -o 
./AlipayWallet_with_symbol -j block_symbol.json

-j ºóÃæ¸úÉÏ֮ǰµÃµ½µÄ json ·ûºÅ±í

×îºóµÃµ½Ò»·Ýͬʱ¾ßÓÐ OC º¯Êý·ûºÅ±íºÍ block ·ûºÅ±íµÄ¿ÉÖ´ÐÐÎļþ

ÕâÀï¼òµ¥½éÉÜÒ»¸ö·ÖÎö°¸Àý , Äã¾ÍÄÜÌå»áµ½Õâ¸ö¹¤¾ßµÄÇ¿´óÖ®´¦ÁË¡£

1.ÔÚ Xcode Àï¶Ô -[UIAlertView show] ÉèÖöϵã

2.ÔËÐгÌÐò£¬²¢ÔÚÖ§¸¶±¦µÄµÇÂ¼Ò³ÃæÊäÈëÊÖ»úºÅºÍ ´íÎóµÄÃÜÂë £¬µã»÷µÇ¼

3.Xcode »áÔÚ ¡®ÃÜÂë´íÎó¡¯ µÄ¾¯¸æ¿òµ¯³öʱͣÏ£¬×ó²à»áÏÔʾ³öÕâÑùµÄµ÷ÓÃÕ»

Ò»ÕÅͼ¿´ÍêÖ§¸¶±¦µÄµÇ¼¹ý³Ì

   
3042 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶Ë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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ