
React Native¼òֱ̫»ðÁË£¬¹úÄÚ´ó¹«Ë¾¶¼ÔÚÕùÏȿֺóµÄ³¢ÏÊ£¬ÈÃÈËÄÑÒÔÏàÐÅÕâÊǵ®Éú¸Õ¸ÕÒ»ÄêµÄ¿ªÔ´ÏîÄ¿¡£ÕýÒòΪËüµÄÄêÇᣬÔÚʹÓÃËü½øÐпª·¢Ê±ÄÑÃâ»áÓöµ½ÕâÑùÄÇÑùµÄ¿Ó£¬Òò´Ë£¬ÎÒÃÇÑûÇëÁË¡¶React
NativeÈëÃÅÓëʵս¡·µÄ×÷ÕßÖ®Ò»£¬÷È×å¸ß¼¶Ñз¢¾ÀíκÏþ¾üÀ´ÎªÎÒÃǽâÎöRN¿ª·¢ÖеÄÍ´µã¡£±¾ÎÄ·ÖÏíµÄÊÇÔÚ»·¾³´î½¨ºÍÀ©Õ¹ÖлáÓöµ½µÄÎÊÌâÓë½â¾ö·½°¸¡£
ÒýÑÔ
React NativeµÄ³öÏÖ£¬ÎªAPP¿ª·¢ÕßÃÇ´øÀ´Á˳嶯ºÍ¼¤Ç飬ÁîNative¿ª·¢ÕߺÍWeb¿ª·¢Õß¶¼ÎªÖ®³ÕÃÔ¡£Ë²¼ä¸÷À༼ÊõÂÛ̳¡¢¼¼ÊõÉçÇøÉõÖÁ³ö°æÉç¶¼ÕùÏȱ¨µÀÆäÏà¹ØÄÚÈÝ¡£È»¶ø¶ÔÓÚÒ»°ãµÄ³õѧÕßÀ´Ëµ£¬×î¼òµ¥ÒªÇóιýÓÚ°´ÕÕ¹Ù·½ÌṩµÄÏòµ¼À´Íê³É»ùÓÚReact
NativeµÄ´¦Å®Ö®×÷¡£¾ÍÊÇÕâô¼òµ¥µÄÒ»¸öÒªÇó£¬È´°ÑÎÞÊý¿ª·¢Õß¾ÜÖ®ÃÅÍâ¡£ÆäÖÐÔÒòÔÚÓÚ³õѧÕßÔÚ°´Õս̴̳µÄ¹ý³ÌÖУ¬×Ü»á³öÏÖÕâÑùÄÇÑùµÄÎÊÌ⣬¸ø¿ª·¢ÕßÃǵÄÈñÆøÖØÖØÒ»»÷¡£ÏÂÎĽ«ÒÔÆäÖÐһЩ±È½ÏÍ»³öµÄÎÊÌâΪÆðµã£¬´Ó¿ª·¢Ç°ºÍ¿ª·¢ÖÐÁ½·½ÃæÀ´¼ÓÒÔ·ÖÎö²¢¸ø³öÏàÓ¦µÄ½â¾ö·½°¸£¬Ï£ÍûÄܹ»¸ø¹ã´ó¿ª·¢ÕßÃÇÌṩЩÐíʵս¾Ñ飬ÉÙ×ßһЩ²»±ØÒªµÄÍä·¡£
¿ª·¢Ç°
ÃæÁÙµÄÎÊÌâ
°´ÕÕ¹Ù·½µÄÏòµ¼£¬ÔÚHomebrew ¡¢Watchman¡¢Flow¡¢nvm¡¢nodeµÈÔËÐл·¾³°²×°Íêºó£¬Òª×öµÄµÚÒ»¼þÊÂÇé±ãÊǰ²×°React
NativeÃüÁîÐй¤¾ß²¢ÓÉÆä³õʼ»¯React NativeÏîÄ¿¡£´úÂëÈçÏ£º
$
npm install -g react-native-cli
$ react-native init AwesomeProject
|
È»¶ø¾ÍÊÇÕâôÁ½¾ä¼ò¶ÌµÄ´úÂ룬ȴÔËÐеÄÒ²²»ÊÇÄÇôµÄ˳Àû¡£¾³£»áÌýµ½¿ª·¢ÕßÃDZ§Ô¹°²×°¸öÃüÁîÐй¤¾ßÒ²Òª·Ç½¡£
¶ÔÓÚ³õѧÕßÃÇ£¬×î½Ý¾¶µÄ°ì·¨£¬Äª¹ýÓڲο¼±ðÈ˵ÄÏîÄ¿¡£¾³£»áÓöµ½Õâôһ¸ö³¡¾°£¬
ÏîÄ¿ÖÐÒªÓõ½Ò»¸öslider×é¼þ£¬´ÏÃ÷µÄ¿ªÕßÃǺܿìÏëµ½ÁËgithub£¬ÔÚÆäÉÏÒ»ËÑ·¢ÏÖ»¹Õæ²»ÉÙ£¬ÓÚÊǺõÐ˸߲ÉÁҵĽ«ÆäÕû¸öÏîÄ¿cloneÏÂÀ´£¬ÕÒµ½ÆäÖеÄslider×é¼þ£¬ÄÉÈë×Ô¼ºµÄÏîÄ¿ÖУ¬¼òµ¥µÄÌí¼ÓÁ˼¸¾äÒýÈë´úÂ룬±ã¼±³å³åµÄÖ´ÐÐCMD+R£¬Ë²¼äÄ£ÄâÆ÷ÄÚһƬºìÆÁ£¬·ÖÎöÔÒò£¬×îºó·¢ÏÖÊÇfontsize²»Ö§³ÖÊý×ÖÁËÒ»¶¨ÒªÒÔ×Ö·û´®µÄ·½Ê½ÉèÖã¬ÕâÊǶàô³ÁÍ´µÄ´ò»÷¡£
ÍæÁËÒ»¶Îʱ¼äµÄReact Native¿ª·¢ÕßÃÇÓ¦¸ÃÒ²»á·¢ÏÖ£¬Ëæ×Å¿ª·¢³öÀ´µÄReact
NativeÏîÄ¿µÄÔö¶à£¬µçÄԵĴ洢¿Õ¼ä»áÔ½À´Ô½Ð¡ÁË£¬·¿ªReact NativeµÄÀú´ú°æ±¾¿ÉÒÔ¿´µ½£¬gzipÖ®ºó70M×óÓÒ£¬½âѹºóÔÚ350M×óÓÒ¡£ÕâÑùµÄÌå»ý´óС£¬¼¸¸öÏîÄ¿ÏÂÀ´£¬¼¸¸öGµÄ¿Õ¼ä˲¼äûÁË¡£
ÄÇô¹éÄÉÆðÀ´Ö÷ÒªÊÇÒÔϼ¸ÀàÎÊÌâÖÆÔ¼×Å¿ª·¢ÕßÃÇ¡£
1.React Native ÃüÁîÐл·¾³´î½¨À§ÄÑ
2.React Native ³õʼ»¯ÏîÄ¿À§ÄÑ
3.React Native °æ±¾Éý¼¶¾³£´øÀ´API²»Ö§³Ö
4.Ëæ×ÅReact Native
ÏîÄ¿µÄÔö¶à£¬Õ¼ÓÿռäÔ½´ó
ÔÒò·ÖÎö
React Native ÃüÁîÐл·¾³´î½¨À§ÄÑ£¬Ö÷ÒªÊÇÂý£¬ÎªÊ²Ã´ÄØ£¬´Ó´úÂë
npm install -g react-native-cli |
ÖпÉÒÔÁ˽⵽£¬ÕâÊÇÔÚ´Ónpm·þÎñÆ÷ÉÏÀÈ¡react-native-cli¡£ËùÒÔÂýµÄÔÒò±ãÊÇÒòΪnpm·þÎñÆ÷²»ÔÚ¹úÄÚ¡£´ÏÃ÷µÄ¹úÈËÒѸø³öÁ˽â¾ö°ì·¨£¬Í¨¹ý·Ç½À´½â¾ö´ËÎÊÌâ¡£¸ü¸ßÐ˵ÄÊÇnpmÌṩÁËÒ»¸öregisterµÄÊôÐÔ£¬¿ÉÒÔÈÿª·¢Õß×ÔÓɵÄÉèÖþµÏñµØÖ·¡£¿ª·¢ÕßÃÇ×î³£ÓõıãÊÇÌÔ±¦µÄ¾µÏñµØÖ·¡£¾Ýͳ¼Æ¹úÄڱȽϳ£ÓõľµÏñµØÖ·ÓУº
http://r.cnpmjs.org/
http://registry.npm.taobao.org/
http://registry.npmjs.eu/
http://registry.npmjs.org.au/
http://npm.strongloop.com/
https://registry.nodejitsu.com/
http://registry.npmjs.pt/ |
Õâô¶àÑÛ»¨çÔÂҵĵØÖ·£¬µÄÒª¸Ðл¹úÈË¿ªÔ´ÒâʶµÄÇ¿´ó£¬ÊÇËûÃǸø¿ª·¢ÕßÃÇ´øÀ´Á˸£Òô£¬Èÿª·¢ÕßÃÇÔÙÒ²²»Óõ£ÐÄÏÂÔØ²»µ½nodejs°üÁË¡£
ÕâÊǹÙÍø³õʼ»¯React NativeÏîÄ¿µÄ´úÂ룺
react-native init AwesomeProject |
¿ÉÒÔ¿´µ½ÕâÊÇͨ¹ý"react-native init"Õâ¸öÃüÁîÀ´½øÐгõʼ»¯µÄ¡£ÄÇ¡°react-native¡±Õâ¸öÃüÁîÓÖÊÇ´ÓÄÄÀïÀ´µÄÄØ£¬Æð³õ¸ø±ÊÕß´øÀ´ºÜ´óµÄÀ§»ó£¬ÉÏÃæÖ»°²×°ÁË¡°react-native-cli¡±Õâ¸önode°ü£¬Ôõô»áð³ö¸ö¡°react-native¡±ÃüÁî¶ø²»ÊÇ¡°react-native-cli¡±ÃüÁîÄØ¡£ÎÒÃÇ·¿ª¡°react-native-cli¡±µÄ°²×°Ä¿Â¼£¬macÉÏÊÇÔÚ£º
/usr/local/lib/node_modules/react-native-cli |
Ŀ¼£¬´ò¿ªÆäÖеġ°package.json¡±Îļþ£¬¿ÉÒÔ¿´µ½ÓÐÕâôһ¶Î´úÂ룺
"bin": {
"react-native": "index.js"
}, |
ÕâÀï¼òµ¥½éÉÜÏÂbinÊôÐÔ£¬"bin"ÊÇÓɶà¸ö¡°{
ÃüÁîÃû£ºÎļþÃû }¡±×é³ÉµÄÒ»¸ömap¡£ÔÚ°²×°µÄʱºò»á½«Ã¿¸ö¡°ÃüÁîÃû¡±Á´½Óµ½prefix/bin£¨È«¾Ö³õʼ»¯£©»òÕß./node_modules/.bin/£¨±¾µØ³õʼ»¯£©¡£ÉÏÃæ´úÂëÔÚ°²×°µÄʱºò£¬»á½«index.jsÁ´½Óµ½/usr/local/bin/react-native¡£ÕâÑùʹÓÃ"react-native
init"½øÐгõʼ»¯µÄÀ§»óÒ²¾Í¿ÉÒÔÀí½âÀ²¡£ÄÇôÕâ¸ö¡°react-native
init¡±¾¿¾¹×öÁËÊ²Ã´ÄØ¡£¼ÌÐø¸ú×Ù£¬´ò¿ªindex.js,ÆäÖеIJ¿·Ö´úÂëÆ¬¶Î£º
if (args[0] === 'init'){
if (args[1]) {
init(args[1]);
} else {
}
} else {
......
} |
¿ÉÒÔ¿´³ö£¬index.jsÆäʵֻ¶Ô¡°init¡±·½·¨×öÁË´¦Àí£¬¾ßÌåµ½¡°init¡±·½·¨ÖÐÓÖ×öÁËÐ©Ê²Ã´ÄØ£¬½ØÈ¡Á˲¿·ÖÖ÷Òª´úÂëÈçÏÂ:
1¡¢fs.writeFileSync(path.join(root, 'package.json'), JSON.stringify(packageJson));
2¡¢run('npm install --save react-native', function(e)
{ |
ÆäÖдúÂë1ÊǶ¯Ì¬Éú³Épackage.json£¬´úÂë2ÊÇÔÚ±¾µØ°²×°react-nativeÄ£¿é¡£µ½´Ë£¬Ö®Ç°Ìáµ½µÄ¡°React
Native ³õʼ»¯ÏîÄ¿À§ÄÑ¡±Ò²¾Í²»ÄÑÀí½âÀ²£¬ÔÒò¶¼ÊÇnpmÈǵĻö¡£
¼ÈÈ»ÒѾ¿´µ½ÕâÀïÀ²£¬ÄǾÍ˳´øÍêÕûµÄ½éÉÜÏÂreact-nativeÕâ¸öÃüÁî¡£³ýÁË¡°react-native
init¡±ÃüÁîÍ⣬¹ÙÍø»¹ÌṩÁË ¡°react-native bundle¡±¡¢¡°react-native
run-android¡±µÈÃüÁ¶øindex.jsÎÄÖÐÈ´Ö»ÓС°init¡±ÃüÁî¡£ÄÇÆäËûÃüÁîÓÖÊÇÔõôÀ´µÄÄØ¡£´ø×ÅÒÉÎÊ£¬±ÊÕßÓÖÕÒµ½ÁËÈçϵĴúÂ룺
< var CLI_MODULE_PATH = function() {
return path.resolve(
process.cwd(),
'node_modules',
'react-native',
'cli'
);
};
var cli;
try {
cli = require(CLI_MODULE_PATH());
} catch(e) {}
if (cli) {
cli.run();
} else {
......
} |
´ò¿ª¡°CLI_MODULE_PATH¡±ËùÖ¸µÄcliÎļþ£¬ÆäÖ¸ÏòÁË¡°module.exports
= require('./local-cli/cli.js');¡±£¬¼ÌÐø´ò¿ª¡°/local-cli/cli.js¡±²¿·Ö´úÂëÈçÏ£º

¿´µ½ÕâÀҲ¾ÍÑÛǰ»íÈ»¿ªÀÊÆðÀ´£¬ÔÀ´³ý¡°init¡±ÃüÁîÍ⣬ÆäËüÃüÁî¶¼ÔÚÕâÀïÀ²£¬ÕâÈñÊÕßÃ÷°×ÁËÒ»¼þÊÂÇ飺Ҳ¾ÍÊÇ˵¡°init¡±¿ÉÒÔÔÚÈκεط½Ê¹Ó㬶øÆäËûÃüÁîÖ»ÄÜÔÚReact
NativeÏîÄ¿µÄ¸ùĿ¼ÏÂʹÓà £¬²»µÃ²»Åå·þFacebookÉè¼ÆÖ®ÇÉÃî¡£
Óë´Ëͬʱ£¬ÁíÒ»¼þÖØÒªµÄÊÂÇéÒ²¾ÍÏÔµÃÇåÎú¿É¼ûÁË¡£ÄǾÍÊÇÔÚ¡°React Native¡±µÄ¿ª·¢ÖУ¬ÆäʵÓÐÁ½¸ö¡°react-native¡±£¬Ò»¸öÊǵġ°react-native-cli¡±Éú³ÉµÄÈ«¾ÖµÄreact-nativeÃüÁһ¸öÊÇÔÚ³õʼ»¯ÏîĿʱ°²×°µÄ¡°react-native¡±Ä£¿é£¬¼´ÔÚÓ¦Óÿª·¢ÖÐͨ¹ý¡°require('react-native')¡±ËùÒýÓõÄÄ£¿é¡£ÕâÁ½¸ö¼òµ¥Çø±ð±ãÊÇ£¬Ò»¸öÊÇÈ«¾ÖµÄÄ£¿é£¬Ò»¸öÊǾֲ¿µÄÄ£¿é¡£È«¾ÖÄ£¿éÖÐÖ»ÌṩÁËÒ»¸ö¡°init¡±·½·¨£¬¶ø¾Ö²¿Ä£¿éÌṩÁ˳ý¡°init¡±·½·¨ÍâµÄËùÓÐÃüÁîÒÔ¼°React
Native¿ª·¢ÖÐÓõ½µÄËùÓй¦ÄÜ¡£
¾¹ýÉÏÃæ¶Ô"react-native-cli"Óë¡°react-native¡±µÄ·ÖÎö£¬¿ÉÒÔ¿´³öFacebookÓ¦¸ÃÊÇÍÆ¼ö¡°react-native¡±Ä£¿é¾Ö²¿»¯£¬ËùÒÔ²»ÂÛÔÚReact
NativeÏîÄ¿³õʼ»¯µÄ¹ý³ÌÖУ¬»¹ÊÇcloneÒÑÓеÄReact
NativeÏîÄ¿£¬¶¼ÐèÒªÔÚµ±Ç°ÏîÄ¿ÏÂÏÂÔØºÍ°²×°¡°react-native¡±Ä£¿é£¬Ê¹µÃReact
Native ÏîĿռÓõĿռäÔ½À´Ô½´ó¡£
½â¾ö°ì·¨
1¡¢Ë½ÓÐNPM´î½¨
ËäÈ»ÉÏÃæ½²µÄ¹úÄÚ¾µÏñ£¬ÒÑʹNPMµÄÏÂÔØËٶȺܿìÀ²£¬µ«ÊÇÈÔÈ»²»ÈçÔÚ×Ô¼ºÄÚÍø¼ÜÉè¸öNPM˽ÓзþÎñÆ÷£¬¸øÍŶӳÉÔ±Ìṩ¸ü¿ì½ÝµÄÏÂÔØËÙ¶È¡£¼ÜÉè˽·þ£¬³ýÁËËÙ¶È¿ìÒÔÍ⣬»¹ÓÐÒ»¸öÖØÒªµÄÔÒò¾ÍÊÇһЩÄÚ²¿µÄÒþ˽ģ¿éÒ²¿ÉÒÔ·¢ÔÚ˽·þÉϹ©ÄÚ²¿³ÉԱʹÓá£
ÊÐÃæÉϵÄNPM˽·þÒ²Óкܶ࣬ÕâÀïÍÆ¼öµÄÊÇÒ»¸ö½Ð¡°sinopia¡±µÄNPM˽·þ¡£¡°sinopia¡±µÄ×ö·¨ÊÇÓÅÏÈ´Ó×Ô¼ºµÄ²Ö¿âÖÐÀȡģ¿é£¬Èç¹û·¢ÏÖûÓУ¬±ã´ÓÔ¶¶ËµÄNPM·þÎñÆ÷ÀÈ¡¡£Ò²ÐíÓеĿª·¢ÕßÔçÒÑ×¢Òâµ½£¬Õâ¸ö˽·þÆäʵÔÚ¡°react-native-cli¡±µÄNPM¿âÖÐreact-native-cli¾ÍÓнéÉÜ£¬±ÊÕß²ÂÏëÓ¦¸ÃÊÇFacebookÒ²ÍÆ¼öÖîλʹÓá°sinopia¡±À´´î½¨NPM˽·þ°É¡£¡°sinopia¡±µÄgithubµØÖ·Îª£ºhttps://github.com/rlidwka/sinopia¡£¡°sinopia¡±µÄ´î½¨±È½Ï¼òµ¥£¬²½ÖèÈçÏ£º
-°²×°ÃüÁ
-Æô¶¯ÃüÁî
Æô¶¯ºóµÄÈÕÖ¾£º
warn
--- config file - /Users/youname/.config/sinopia/config.yaml
warn --- http address - http://localhost:4873/ |
ÈÕÖ¾Öеġ°config file¡±Îª¡°sinopia¡±µÄÅäÖõØÖ·£¬¡°http
address¡±Îª¡°sinopia¡±µÄÖ÷Ò³µØÖ·¡£´ò¿ª¡°/Users/youname/.config/sinopia/config.yaml¡±¿ÉÒÔ¿´µ½Ä¬ÈϵÄÅäÖÃÐÅÏ¢ÈçÏ£º

Èç¹ûÏë¿´¸üÍêÕûµÄÅäÖÿÉÒԲο¼ÕâÀïhttps://github.com/rlidwka/sinopia/blob/master/conf/full.yaml¡£
-´´½¨ÐÂÓû§
$ npm adduser --registry http://localhost:4873 |
°´ÕÕÃüÁîÐÐÖеÄÌáʾ£¬ÒÀ´ÎÊäÈëUsername¡¢Passworld¡¢Email¼´¿ÉÍê³ÉÓû§µÄ´´½¨¡£
-ÉèÖÃnpm¾µÏñµØÖ·
$ npm set registry http://localhost:4873/ |
-·¢²¼npm°ü
ÔÚ·¢²¼Ä£¿éǰ£¬ÐèÒªÏȵǼ
$ npm adduser
Username£ºxxx
Passworld£ºxxx
Email£ºxxx@xx.com |
µÇ¼Íê³Éºó£¬±ã¿É½øÈë´ý·¢²¼Ä£¿éµÄ¸ùĿ¼½øÐз¢²¼ÁË¡£
ÈôûÓС°package.json¡±ÎļþµÄ»°£¬ÐèÏÈÖ´ÐС°npm
init¡±½øÐд´½¨£¬È»ºóÖ´ÐÐÉÏÃæµÄÃüÁî¼´¿É½«Ä£¿éÍÆË͵½×Ô¼ºµÄNPM·þÎñÆ÷ÉÏÁË¡£ÕâÑùÎÒÃÇÔÚ°²×°¸ÃÄ£¿éµÄʱºò£¬±ãÊÇ´Ó×Ô¼ºµÄNPM·þÎñÆ÷ÉÏÏÂÔØÁË¡£
-Ô¶¶Ë·ÃÎÊ
ÉÏÃæÖ»ÊÇÔÚ±¾µØ´îÆðÁËNPM·þÎñÆ÷£¬Ö»ÄÜͨ¹ý±¾µØÀ´·ÃÎÊ£¬Èç¹ûÒª×öµ½Ô¶¶Ë·ÃÎʵϰ£¬ÐèÒªÕâÑùÀ´Æô¶¯¡°sinopia¡±£º
-ÅäÖÃReact NativeµÄsinopia·þÎñÆ÷
¶ÔÓÚreact-nativeµÄÅäÖ㬹ÙÍø½¨ÒéÐÞ¸ÄpackagesºÍmax_body_sizeµÄÅäÖÃÈçÏ£º
......
packages:
'react-native':
allow_access: $al
l allow_publish: $all
'react-native-cli':
allow_access: $all
allow_publish: $all
'*':
allow_access: $all
proxy: npmjs
max_body_size: '50mb' |
´ÓÐÞ¸ÄÖпÉÒÔ¿´µ½£¬Ö÷ÒªÊǶÔÄ£¿é·¢²¼×öÁËÏÞÖÆ£¬Ö»ÔÊÐí·¢²¼¡®react-native'ºÍ'react-native-cli'Ä£¿é£¬ÆäËûÄ£¿éÒ»¸Å²»ÔÊÐí·¢²¼£¬²ÂÏëÓ¦¸ÃÊÇŽ«ÆäËûÄ£¿é¸²¸Çµô°É¡£¶Ômax_body_sizeµÄÉèÖã¬Ö÷ÒªÊdzöÓÚ¶ÔÄ£¿é´óСµÄ¿¼ÂÇ£¬±ÜÃâ²úÉú"request
entity too large"µÄ´íÎó£¬ÒòΪĬÈϵĴóСΪ1mb¡£
·þÎñÆ÷ÅäºÃºó£¬½ÓÏÂÀ´¾ÍÐèÒª½«react-nativeÄ£¿éºÍreact-native£cliÄ£¿é·¢²¼ÉÏÈ¥ÁË¡£ÎªÁË·½±ãÆð¼û£¬ÎÒÃǽ¨Á¢ÈçϵÄĿ¼½á¹¹£º
react_native_modules
react-native
v0.21.0
node_modules
react-nativ
e v0.20.0
node_modules
react-native
react-native-cli
v1.0.0
node_modules
react-native-cli |
ÆäÖÐreact_native_modulesΪÎÒÃÇÔÚÓû§Ä¿Â¼Ï´´½¨Îļþ¼Ð¡£Ö®ËùÒÔÉè¼Æ³ÉÕâÑùµÄ½á¹¹ÊÇΪÁËÎÒÃÇ·½±ãÏÖÔÚNPM·þÎñÆ÷ÉϵÄÄ£¿é¡£ÈçÎÒÃÇÒªÏÂÔØ0.19.0°æ±¾µÄreact-nativeÄ£¿é£¬ÎÒÃÇÖ»ÐèÒª´´½¨react_native_modules\react-native\v0.19.0Îļþ¼Ð£¬È»ºóÔÚ¸ÃÎļþ¼ÐÖÐÖ´ÐÐ
$ npm install react-native@0.19.0 |
¼´¿ÉÍê³É´ÓNPM·þÎñÆ÷É϶ԸÃÄ£¿éµÄÏÂÔØ¡£½ÓÏÂÀ´½øÈëµ½node_modules\react-nativeĿ¼£¬Ö´ÐÐ
$ npm set registry http://host:port/ //Òª¼ÇµÃÇл»µ½sinopia·þÎñÆ÷Ŷ£¬·ñÔò»á½«Ä£¿é·¢ÔÚNPM·þÎñÆ÷É϶ø²»ÊÇsinopia·þÎñÆ÷ÉÏ
$ npm publish |
ʵÏÖ¶à°æ±¾¹ÜÀí
Èç¹û˵sinopiaÊÇÓÃÀ´½â¾öËٶȵÄÎÊÌ⣬ÄÇô¶à°æ±¾µÄ¹ÜÀí¿ÉÒÔ˵ÊÇÓÃÀ´½â¾öÌå»ýµÄÎÊÌâ¡£×ö¹ýnode.js¿ª·¢µÄͬѧ£¬¶¼Çå³þnvm£¬ËüÊÇnodejsµÄ°æ±¾¹ÜÀí¹¤¾ß£¬ÉõÖÁ°üÀ¨React
NativeµÄ¹ÙÍøÒ²ÓÐ̸µ½Ê¹ÓÃnvmÀ´°²×°node.js¡£ÔÚreact-native°æ±¾µü´úÈç´ËƵ·±µÄ½×¶Î£¬¾ÓȻûÓÐreact-nativeµÄ°æ±¾¹ÜÀí¹¤¾ß£¬ÕâÈÿª·¢ÈËÔ±ÃǺÜÊÇÊÜÉË¡£ËùÒÔ£¬ÕâÀォ³¢ÊÔ×ÅÉè¼ÆÒ»¸öreact-nativeµÄ°æ±¾¹ÜÀí¹¤¾ß£¬ÎÒÃÇ¿ÉÒÔÇ×ÇеĽÐËürnvm£¨react-native
version manager£©¡£ÔÚÁ˽ârnvmµÄ˼·ǰ£¬ÏÈÁ˽âÏÂrnvmµÄʹÓó¡¾°.
-rnvmµÄʹÓó¡¾°
rnvmÈçÆäÃû×ÖÖеÄÄÇÑù£¬Ö÷ÒªÊǶÔreact-nativeµÄ°æ±¾½øÐйÜÀíµÄ¡£ÄÇôËüµÄʹÓó¡¾°¶¼ÓÐÄÄÐ©ÄØ¡£ÕâµÄ´ÓÒ»¸öReact
NativeÏîÄ¿µÄµÄ»ñµÃ·½Ê½ËµÆð¡£Í¨³£Çé¿öÏÂÓÐÈçϼ¸ÖÖ·½Ê½£º
a¡¢Í¨¹ýreact-nativeÃüÁî³õʼ»¯ÏîÄ¿»ñµÃ
b¡¢Í¨¹ý´ÓgithubÉÏclone»ñµÃ
c¡¢Í¨¹ý¿½±´»ñµÃ
¶ÔÓÚaÖеÄʹÓó¡¾°£¬ÔÚreact-native³õʼ»¯ÏîÄ¿µÄʱºò£¬Õý³£Çé¿öÏÂrnvmÊDz岻ÉÏÊֵġ£Èç¹ûÕæÒªÓÃrnvm£¬ÐèÒªÇÖÈë/usr/local/lib/node_modules/react-native-cli/index.jsÎļþ£¬½«run('npm
install --save react-native'¸ÄΪrun('rnvm
use ',»òÕßÒ²¿ÉÒÔ¸ørnvmÌí¼ÓÒ»¸öinitÃüÁîÀ´È¡´úreact-native
initÃüÁî,ʹÓ÷½Ê½Îªrnvm init AwesomeProject¡£
¶ÔÓÚb¡¢c³¡¾°£¬¿ÉÒÔÖ±½ÓʹÓÃrnvmÃüÁî½øÐд¦Àí¡£
È»¶ø£¬Õâ²¢²»ÊÇrvnmµÄÓÅÊÆ¡£rnvmµÄºËÐÄ˼ÏëÊǽ«react-nativeÄ£¿é°²×°ÔÚÈ«¾ÖĿ¼Ï£¬ÕâÑùÿ¸öReact
NativeÏîÄ¿ÔÚʹÓõÄʱºò£¬²»ÐèÒªÔÚ±¾µØÄ¿Â¼Öа²×°Ò»·Ý£¬Ö»ÐèÒªµ÷ÓÃÈ«¾ÖĿ¼ÖеÄreact-native¼´¿É£¬¸ø¿ª·¢Õß½ÚÊ¡Á˲»ÉٵĿռ䡣ÔÙÕßrnvm¸øReact
NativeÏîÄ¿ÖеĶÔreact-native°æ±¾µÄʹÓôøÀ´ÁËÁé»îÐÔ£¬ËùÒÔrnvm¸üÊʺ϶àReact
NativeÏîÄ¿µÄ¿ª·¢¡£
-rnvmµÄĿ¼½á¹¹
prefix_node_modules
node_modules
react-native
react-native-cli
react_native_modules
react-native
v0.21.0
node_modules
react-native
v0.20.0
node_modules
react-native
react-native-cli
v1.0.0
node_modules
react-native-cli |
»¹ÊÇÔÚÓû§Ä¿Â¼Ï´´½¨react_native_modules¡¢prefix_node_modulesÁ½¸öĿ¼½á¹¹¡£react_native_modulesµÄĿ¼ºÍÉÏÃæsinopia·¢²¼Ä£¿éÓõÄÊÇÒ»ÑùµÄ½á¹¹£¬¶¼ÊÇÓÃÀ´´æ·ÅÄ£¿éµÄ¡£Ä¬ÈϵÄÈ«¾Ö°²×°Ä¿Â¼ÔÚ¡°/usr/local/lib/node_modules¡±£¬ÕâÀïµÄprefix_node_modulesĿ¼¾ÍÊÇÓÃÌæ»»ÔÓеÄÈ«¾Ö°²×°Ä¿Â¼£¬ÕâÑù×öµÄºÃ´¦ÊDz»ÐèҪÿ´Î×°È«¾ÖÄ£¿éʱ¶¼Òªsudo¡£
-rnvmµÄÖ´ÐÐÁ÷³Ì
ÕâÀïÐèÒª½áºÏÒ»¸ö³¡¾°À´·ÖÎörnvmµÄÖ´ÐÐÁ÷³Ì£¬Ä³Ì쿪·¢ÈËÔ±´Ógithub
cloneÁËÒ»·Ý±ðÈËдµÄReact NativeµÄ´úÂë£¬ÖØÃüÃûΪmycloneproject£¬ÏëÔÚ±¾µØÔËÐÐÆðÀ´£¬Õý³£Çé¿öÏÂÓ¦¸ÃÊǽøÈëmycloneprojectÏîÄ¿µÄ¸ùĿ¼£¬È»ºóÖ´ÐÐnpm
install¡£ÕâÑù¾Í»á½«package.jsonÖÐÖ¸¶¨µÄËùÓÐÒÀÀµÄ£¿é¶¼°²×°ÔÚµ±Ç°Ä¿Â¼µÄnode_modulesĿ¼ÖС£ÄÇôʹÓÃrnvmÊÇÔõô°²×°µÄÄØ¡£
ÏÖÔÚ¼ÙÉèrnvmÖ»ÓÐÒ»¸öuseÃüÁ¸ñʽΪ
rnvm use version¡£
¾ßÌåµÄÖ´ÐдúÂëÈçÏ£º
$ cd mycloneproject
$ npm config set prefix ~/prefix_node_modules/node_modules
$ npm set registry http://host:port/
$ rnvm use 0.20.0 |
ÔÚÕâ¸ö¹ý³ÌÖз¢ÉúÁËÐ©Ê²Ã´ÄØ£¿
a¡¢ÏȽøÈëmycloneprojectÏîÄ¿µÄ¸ùĿ¼¡£
b¡¢ÉèÖÃÈ«¾ÖÄ£¿é°²×°Ä¿Â¼Îª~/prefix_node_modules/node_modules¡£
c¡¢ÉèÖÃnpmµÄ¾µÏñÖ¸Ïò×Ô¼ºµÄsinopia·þÎñÆ÷£¬ÕâÑùÖ®ºóµÄËùÓÐnpmÃüÁî¾Í»á´Ósinopia·þÎñÆ÷»ñȡģ¿éÁË¡£
d¡¢Ö´ÐÐrnvm
useÃüÁî¡£´úÂëÖп´µ½¿ÉÒÔʹÓÃÈ«¾Ö¡°rnvm¡±ÃüÁÕâ¾ÍÒªÇórnvmÊÇÒ»¸önode.jsµÄÄ£¿é£¬ÇÒ¸ÃÄ£¿éʵÏÖÁËpackage.jonÖеÄbinÅäÖã¬Ê¹ÆäÖ§³ÖÈ«¾Ö°²×°¡£
e¡¢rnvm½ÓÊÕµ½Á½¸ö²ÎÊýÖ®ºóµÄÐÐΪ£º
1.ÔÚÄõ½²ÎÊýºó£¬rvnm»áÈ¥react_native_modules/react-nativeÖвéÕÒÊÇ·ñÓÐv0.20.0Ŀ¼£¬Èç¹ûÓÐÔò½øÈë¸ÃĿ¼£¬²¢Ö´ÐÐnpm
link
2.Èç¹ûûÓУ¬Ôò´´½¨v0.20.0Ŀ¼£¬²¢½øÈë¸ÃĿ¼ִÐÐnpm
install react-native@0.20.0¡£
3.Ö´ÐÐÍêºó£¬½øÈënode_modules/react-nativeÖУ¬Ö´ÐÐnpm
link
4.½Ó×ÅÔڻص½mycloneprojectÏîÄ¿¸ùĿ¼£¬Ö´ÐÐnpm
link react-native£¬È»ºóÔÚÖ´ÐÐnpm install¡£ÕâÑùmycloneprojectÏîÄ¿µÄÒÀÀµÄ£¿é¾Í¶¼°²×°Íê±Ï£¬ÇÒʹÓÃÁË0.20.0°æ±¾µÄreact-native£¬
Õâ±ãÊÇÒ»¸örnvmµÄ»ù±¾Ö´ÐÐÁ÷³Ì¡£µ±È»£¬ÕâÀïÒ²¿ÉÄÜ»áÓÐÐ©ÌØÊâÇé¿ö£¬ÈçֻʹÓÃrnvm
use²»´«°æ±¾ÐÅÏ¢£¬ÕâÑùrnvm¾ÍÐèÒªÏÈ·ÖÎöpackage.jsonÖеÄreact-nativeµÄ°æ±¾ÐÅÏ¢£¬²¢½áºÏnpm
info react-native»ñÈ¡À´µÄ°æ±¾ÐÅÏ¢½øÐд¦Àí£¬µÃ³ö×îÖÕÐèÒªµÄ°æ±¾ÐÅÏ¢£¬È»ºóÔÚÖ´ÐÐrnvm
use ×îÖյİ汾ÐÅÏ¢¡£
ÕâÖ»ÊǸöuseÃüÁîµÄÖ´ÐзÖÎö¡£Ò²¿ÉÒÔÏñnvmÒ»Ñù£¬ÊµÏÖrnvm
install¡¢rnvm ls¡¢rnvm currentµÈÃüÁî¡£
rnmvµÄgithubµØÖ·£ºhttps://github.com/GammaGos/rnvm/
3¡¢ÍêÕû¼Ü¹¹

ͼ1 »ùÓÚrnvmµÄ¿ª·¢¼Ü¹¹Í¼
»ùÓÚÉÏÃæµÄͼÐΣ¬ÕâÀï×ö¼ò¶ÌµÄÃèÊö¡£×ÜÌå·ÖΪÁ½¸ö´óµÄ²¿·Ö£¬Ò»¸öÊÇserver¶Ë£¬Ò»¸öÊÇclient¶Ë¡£server¶ËÊÇÖ¸sinopia·þÎñËùÔڵĶˣ¬Ö÷Òª¸ºÔðÌṩNPM˽ÓзþÎñ¡£Ôڴ¸Ã¶ËµÄʱºò£¬Ð轫³£ÓõÄreact-native°æ±¾ºÍreact-native-cli°æ±¾¶¼ÍÆË͵½¸Ã·þÎñÆ÷ÉÏ£¬±ãÓÚÖ®ºó¿Í»§¶ËµÄʹÓá£client¶ËÊÇÖ¸Óû§¶ËÒ²¾ÍÊÇ¿ª·¢Õß¶Ë¡£¸Ã¶Ë¸ºÔðReact
NativeÏîÄ¿µÄ¹¹½¨¡£¸Ã¶ËÊôÓÚÏû·Ñ¶ËÊÇÖ÷Õ½³¡¡£ ÔÚÉÏͼÖУ¬¸Ã¶ËÖ÷Òª·¢ÉúµÄÂ߼Ϊ£º
1¡¢¿ª·¢ÕßÏȹ¹½¨ÁËÒ»¸öReact Native ProjectAÏîÄ¿
2¡¢È»ºóʹÓÃrnvmÀ´°²×°ÒÀÀµÄ£¿é£¬
3¡¢rnmv½Ó×ÅÔÚÖ¸¶¨µÄĿ¼ÏÂÅжÏÊÇ·ñÓжÔÓ¦µÄÄ£¿é£¬
4¡¢Óеϰ»áÏÈÕÒµ½¶ÔÓ¦µÄÄ£¿é£¬È»ºóÔÙȥģ¿é¸ùĿ¼ÏÂ×önpm
linkµÄ²Ù×÷£¬È»ºó»Øµ½React Native ProjectAÏîÄ¿µÄ¸ùĿ¼£¬Ö´ÐÐnpm
link react-native²Ù×÷£¬½Ó×ÅÖ´ÐÐnpm instalµÄ²Ù×÷¡£
5¡¢Èç¹ûûÓÐÕÒµ½¶ÔӦģ¿éµÄ»°£¬»áÏòsinopia·þÎñÆ÷·¢ËÍÇëÇó£¬
6¡¢ÇëÇóÏÂÔØÐèÒªµÄÄ£¿é£¬²¢·ÅÈëÖ¸¶¨µÄĿ¼ÖУ¬
7¡¢´ýÄ£¿éÏÂÔØÍê±Ïºó£¬ Ö´ÐÐ4ÖеIJÙ×÷¡£
8¡¢Èç¹ûsinopia·þÎñÆ÷ҲûÓеϰ£¬»áÏñnpm·þÎñÆ÷·¢ÆðÇëÇó
9¡¢´ýÄ£¿éÏÂÔØÍêºó£¬Ö´ÐÐ4ÖеIJÙ×÷¡£
10¡¢È»ºó£¬ÔÚ½«¸ÄÄ£¿épublishµ½sinopia·þÎñÆ÷ÉÏ¡£
¿ª·¢ÖÐ
ÃæÁÙµÄÎÊÌâ
ͨ³£ÏîÄ¿ÖУ¬AppÐèÒª¿ª·¢AndroidºÍiOSÁ½¸ö°æ±¾,¾³£»áÓõ½Ò»Ð©Í¼Æ¬£¬²¢ÐèÒª½«ÕâЩͼƬ´òÈëAppÖС£µ±¿ª·¢iOS°æ±¾Ê±£¬ÐèÒªÊÖ¶¯¼ÓÔØÕâЩͼƬ×ÊÔ´µ½xcodeÖС£µ±¿ª·¢Android°æ±¾Ê±ÓÖÐèÒªÊÖ¶¯µÄ¼ÓÔØÒ»´Î¡£ÕâÑù£¬µ±Ä³Ììij¸öͼƬÐèÒª¸üÐÂʱ£¬¾ÍÐèÒª¶ÔAndroidºÍiOS¶¼½øÐÐÐ޸ġ£Èç¹ûÒªÊÇÄܹ»ÈÃÁ½¸ö°æ±¾ÒýÓÃͬһ¸öͼƬ,ÄÇô¾Í»áʹ¿ª·¢±äµÃ¼ò±ã¡£
½â¾ö°ì·¨
Æð³õµÄÏë·¨
ÎÒÃÇ¿ÉÒÔ½èÖúshell½Å±¾´´½¨¡¢°áÔË¡¢½âÎöÎļþµÄÄÜÁ¦£¬¼ÓÉÏһЩ×Ô¶¨ÒåµÄ¹æÔò£¬À´ÊµÏÖAndorid¡¢iOSÁ½¸ö°æ±¾ÒýÓÃͬһ¸öͼƬµÄ¹¦ÄÜ¡£
ÏÂÃæÀ´¼ò¶ÌµÄ½éÉÜÏÂʵÏÖ˼Ïë¡£
iOS°æ±¾ÔÚImages.xcassetsÎļþ¼ÐÖд´½¨·ûºÏ¹æÔòµÄͼƬÎļþÒÔ¼°Îļþ¼Ð¡£Android°æ±¾ÔÚdrawable-hdpi,mdpiµÈÎļþ¼ÐÖд´½¨·ûºÏ¹æÔòµÄͼƬ¡£ÄÇôÕâ¸ö¹æÔòÊÇÊ²Ã´ÄØ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃjsonÐÎʽµÄcongfigÎļþÀ´¶¨ÒåÕâ¸ö¹æÔò£¬¸ñʽÈçÏÂ:
{
"resources":[
{
//×ÊÔ´µÄ±ðÃû
"name":"rose",
//×ÊÔ´µÄÀàÐÍ
"type":"image",
//×ÊԴ·¾¶£¬¿ÉÒÔÏà¶ÔÒ²¿ÉÒÔ¾ø¶Ô
"url":"resources/image/rose.png",
......
},
{
"name":"flower",
"type":"image",
"url":"http://host/path/imagename.jpg"
......
}
]
} |
È»ºóÔÙ½èÖúShellµÄjq²å¼þ£¬Í¨¹ý½âÎö¸Õ²Å¶¨ÒåµÄcongfigÎļþÀ´»ñµÃÔ¼¶¨µÄ¹æÔò£¬»ñµÃ¹æÔòµÄÖ÷Òªshell´úÂëÈçÏ£º
......
index=0; flag=0;
while ((flag<=0));do
read imgname <<< $(cat ./../../resources/image/resource.json
|./jq '.[]' |./jq '.
['$index']'|./jq '.name')
read url <<< $(cat ./../../resources/image/resource.json
|./jq '.[]' |./jq '.
['$index']'|./jq '.url')
done
/**Ê¡ÂÔ´´½¨Í¼Æ¬µÄ´úÂë**/ |
´ý»ñµÃ¹æÔòºó£¬¾Í¿ÉÒÔ¸ù¾Ý¹æÔòÉú³É¸÷¸ö°æ±¾¶ÔÓ¦µÄͼƬ¡£µ½´Ë£¬shell½Å±¾µÄÖ÷ÌåÂß¼ÒѾ½éÉÜÍê³É£¬ÊÇʱºò°ÑËüÈںϵ½Á½¸ö°æ±¾µÄʵ¼ÊÏîÄ¿ÖÐÔËÐÐÁË¡£
ÔÚAndroid°æ±¾ÖУ¬ÎÒÃÇ¿ÉÒÔͨ¹ý¿ª·¢Ò»¸öUnix
executableÎļþ£¬À´·â×°×Ô¼ºµÄrun-androidÔËÐÐÃüÁ´úÂëÈçÏ£º
/**Ê¡ÂÔÇ°Ãæ½âÎöjsonÓë´´½¨Í¼Æ¬µÄ´úÂë**/
cd ../<androidÏîĿ·¾¶>/
react-native run-android |
´ýÆô¶¯AndroidÏîÄ¿ºó£¬Í¼Æ¬Ë³ÀûµÄ¶ÁÈ¡µ½ÁË¡£
ÔÚiOS°æ±¾ÖУ¬ÎÒÃÇ¿ÉÒÔͨ¹ý¿ª·¢Ò»¸öshell½Å±¾£¬²¢°ÑËüÌí¼Óµ½XcodeÏîÄ¿µÄrun
script phaseÖУ¬´ýÆô¶¯iOSÏîÄ¿ºó£¬È´·¢ÏÖ×ÊÔ´Îļþ¸ù±¾¶Á²»µ½¡£ÕâÊÇÎªÊ²Ã´ÄØ?
ÔÒò·ÖÎö
-iOSÖÐReact NativeÏîÄ¿Æô¶¯Ë³Ðò£º
1.ÔÚÆô¶¯React Native XcodeÏîĿʱ£¬»áÏȼÓÔØÏîÄ¿ËùÒÀÀµµÄReactÏîÄ¿£¬½Ó×ÅÔËÐÐReactÏîÄ¿ÖÐÊÂÏȶ¨ÒåºÃµÄrun
script phase£¬×îºóÔËÐÐpackger.sh¡£
2.ÆäÖÐpackger.shÖÐÎÒÃÇ¿´µ½ÈçϵĴúÂ룺
node "$THIS_DIR/../local-cli/cli.js" start "$@" |
3.½Ó×ÅÎÒÃÇÕÒµ½ÁËcli.js£¬¿´µ½ÀïÃæµ÷ÓÃÁ˺öàÄ£¿é¡£ÆäÖÐdefault.config.jsÄ£¿éÖ¸¶¨ÁËJSºÍ×ÊÔ´µÄ¼ÓÔØÂ·¾¶£¬server.jsÄ£¿é³ýÁËÖ¸¶¨server¼àÌýµÄĬÈ϶˿ÚÍ⻹Óмì²ânode°æ±¾µÈ¹¦ÄÜ£¬runServer.jsÄ£¿éÓÃÀ´Æô¶¯server¡£
4.´ýserverÆô¶¯³É¹¦ºó£¬²ÅÔËÐе½iOS
native code¡£Ò²¾ÍÊÇÕâ¸öʱºò£¬²Å»áÔËÐÐXcodeÏîÄ¿ÖУ¬ÊÂÏȶ¨ÒåºÃµÄrun
script phaseÖÐÖ¸¶¨µÄshell½Å±¾£¬¶øÔÚÕâ¸öʱºò£¬ÔÚshell½Å±¾Öд´½¨×ÊԴ·¾¶ÊÇûÓÐÓõġ£ËùÒԾͻá³öÏÖÁËÉÏÃæ×ÊÔ´Îļþ¶Á²»µ½µÄÇé¿ö¡£
-AndroidÖÐReact
NativeÏîÄ¿Æô¶¯Ë³Ðò£º
1.Ê×ÏÈÖ´ÐÐÉÏÃæ·â×°ºÃµÄUnix executableÎļþ£¬¸ÃÎļþÖлáµ÷ÓÃ×ÊÔ´ÎļþÉú³ÉµÄ´úÂ룬½«×ÊÔ´ÎļþÉú³É¡£
2.È»ºóÔÚ¸ÃÎļþÖлá¼ÌÐøÔÙÖ´ÐÐreact-native
run-androidÃüÁ´Ëʱ¸ù¾Ýreact-native-cliÄ£¿éµÄpackage.jsonÖÐbinµÄ¶¨Ò壬µ÷ÓÃnode.jsÖ´ÐÐ$prefix/react-native-cli/index.js¡£
3.ÔÚindex.jsÖлáÏȼÓÔØcli.jsÄ£¿éÈ»ºóÔËÐÐÆärun·½·¨¡£ÔÚcli.jsÄ£¿éÖÐ×öµÄ¹¤×÷ºÍÉÏÃæ·ÖÎöµÄiOSÖеÄcli.js×öµÄ¹¤×÷ÊÇÒ»ÑùµÄ¡£
4.´ýserverÆô¶¯³É¹¦ºó£¬²Å»áÔËÐе½Android
native code,ËùÒÔÔËÐзâ×°ºÃµÄUnix executableÊDz»»áµ¼ÖÂ×ÊԴʧЧµÄ£¬ÒòΪ×ÊÔ´Éú³É´úÂëÒѾÔÚreact-native
run-androidÃüÁîÔËÐÐ֮ǰ±»Ö´ÐйýÁË¡£
×îÖյĽâ¾ö°ì·¨
ΪÁËÈÃ×ÊÔ´Éú³ÉµÄ´úÂëÖ´ÐÐ˳ÐòÌáǰ£¬¿ÉÒÔÏÈÔö¼ÓÒ»¸öÃûΪAppPrepareµÄCommandÀàÐÍÏîÄ¿£¬À´ÔËÐдËShell¡£È»ºóÔÚXcodeÏîÄ¿Target
DependenciesÖÐÌí¼ÓAppPrepareÏîÄ¿£¬ÕâÑù¾Í»áÏÈÔËÐÐAppPrepareµÄÏîÄ¿ºó²Å»áÔËÐÐXcodeÏîÄ¿£¬´Ó¶ø´ïµ½ÁËÎÒÃǵÄÄ¿µÄ¡£
ͼ2 XcodeÏîÄ¿ÒÀÀµÍ¼ |