我想用Phonegap Build編譯我的Ionic應用程序(我正在使用Mac,因此我無法編譯到iOS)。Ionic Framework + Phonegap構建:工作流程
什麼是最佳工作流程?
感謝
我想用Phonegap Build編譯我的Ionic應用程序(我正在使用Mac,因此我無法編譯到iOS)。Ionic Framework + Phonegap構建:工作流程
什麼是最佳工作流程?
感謝
這是我自己嘗試回答這個(請幫我更新這個所以每個人都可以受益):
構建應用程序與離子:
ionic start myApp sidemenu
etc...
在默認離子app config.xml文件位於www/
文件夾上方的根目錄中,因此將它移動到Phonegap Build的www/
文件夾中即可找到它。
mv config.xml www/
然後zip
的www/
文件夾或git push
它從本地計算機到已與PhoneGap的建立鏈接的遠程混帳回購協議。只能壓縮或推送此目錄,因爲如果讓其他目錄位於Ionic根目錄(如node_modules)中,則您的應用程序將太大而無法在Phonegap Build上編譯。
然後在Phonegap Build上編譯。
經過這整個晚上和整個上午的戰鬥,我想出了一個hackish的解決方案。
希望它可以幫助別人。
由於離子V1.0,至少我簡單的項目,最大的區別就是
我做了什麼:
config.xml更改:
吞加法:
這意味着,我的工作流程建設(直到我需要改變的東西的config.xml)現在看起來是這樣的:
gulp phonegap
顯然很多地區的改進在這裏,但我需要的東西我可以用現在進行發佈。在創建一個靜態config_phonegap.xml之前,我探索了一些想法,比如用JS解析xml或製作XSLT文件。對於努力量來說,這一點似乎是低迴報,所以我沒有遵循。
下面是相關的代碼位參考
正則表達式:
### icon regex
# android
<icon src="([\.\w\\-]+)" density="([\w-]+)"/>
<icon src="$1" gap:platform="android" gap:qualifier="$2"/>
# ios
<icon src="([@\.\w\\-]+)" width="([\d]+)" height="([\d]+)"/>
<icon src="$1" gap:platform="ios" width="$2" height="$3" />
### splash regex
# android
<splash src="([\.\w\\-]+)" density="([\w-]+)"/>
<gap:splash src="$1" gap:platform="android" gap:qualifier="$2" />
#ios
<splash src="([[email protected]\.\w\\-]+)" width="([\d]+)" height="([\d]+)"/>
<gap:splash src="$1" gap:platform="ios" width="$2" height="$3" />
樣品的PhoneGap兼容的config.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.yadda.yadda" version="2.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>my app name</name>
<description>
la di da desc
</description>
<author email="[email protected]" href="https://harhar.com/">w--</author>
<content src="index.html"/>
<access origin="*"/>
<preference name="webviewbounce" value="false"/>
<preference name="UIWebViewBounce" value="false"/>
<preference name="DisallowOverscroll" value="true"/>
<preference name="BackupWebStorage" value="none"/>
<preference name="SplashScreen" value="screen"/>
<preference name="SplashScreenDelay" value="1500"/>
<icon src="resources/android/icon/drawable-ldpi-icon.png" gap:platform="android" gap:qualifier="ldpi"/>
<icon src="resources/android/icon/drawable-mdpi-icon.png" gap:platform="android" gap:qualifier="mdpi"/>
<icon src="resources/android/icon/drawable-hdpi-icon.png" gap:platform="android" gap:qualifier="hdpi"/>
<icon src="resources/android/icon/drawable-xhdpi-icon.png" gap:platform="android" gap:qualifier="xhdpi"/>
<icon src="resources/android/icon/drawable-xxhdpi-icon.png" gap:platform="android" gap:qualifier="xxhdpi"/>
<icon src="resources/android/icon/drawable-xxxhdpi-icon.png" gap:platform="android" gap:qualifier="xxxhdpi"/>
<gap:splash src="resources/android/splash/drawable-land-ldpi-screen.png" gap:platform="android" gap:qualifier="land-ldpi" />
<gap:splash src="resources/android/splash/drawable-land-mdpi-screen.png" gap:platform="android" gap:qualifier="land-mdpi" />
<gap:splash src="resources/android/splash/drawable-land-hdpi-screen.png" gap:platform="android" gap:qualifier="land-hdpi" />
<gap:splash src="resources/android/splash/drawable-land-xhdpi-screen.png" gap:platform="android" gap:qualifier="land-xhdpi" />
<gap:splash src="resources/android/splash/drawable-land-xxhdpi-screen.png" gap:platform="android" gap:qualifier="land-xxhdpi" />
<gap:splash src="resources/android/splash/drawable-land-xxxhdpi-screen.png" gap:platform="android" gap:qualifier="land-xxxhdpi" />
<gap:splash src="resources/android/splash/drawable-port-ldpi-screen.png" gap:platform="android" gap:qualifier="port-ldpi" />
<gap:splash src="resources/android/splash/drawable-port-mdpi-screen.png" gap:platform="android" gap:qualifier="port-mdpi" />
<gap:splash src="resources/android/splash/drawable-port-hdpi-screen.png" gap:platform="android" gap:qualifier="port-hdpi" />
<gap:splash src="resources/android/splash/drawable-port-xhdpi-screen.png" gap:platform="android" gap:qualifier="port-xhdpi" />
<gap:splash src="resources/android/splash/drawable-port-xxhdpi-screen.png" gap:platform="android" gap:qualifier="port-xxhdpi" />
<gap:splash src="resources/android/splash/drawable-port-xxxhdpi-screen.png" gap:platform="android" gap:qualifier="port-xxxhdpi" />
<icon src="resources/ios/icon/icon.png" gap:platform="ios" width="57" height="57" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="114" height="114" />
<icon src="resources/ios/icon/icon-40.png" gap:platform="ios" width="40" height="40" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="80" height="80" />
<icon src="resources/ios/icon/icon-50.png" gap:platform="ios" width="50" height="50" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="100" height="100" />
<icon src="resources/ios/icon/icon-60.png" gap:platform="ios" width="60" height="60" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="120" height="120" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="180" height="180" />
<icon src="resources/ios/icon/icon-72.png" gap:platform="ios" width="72" height="72" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="144" height="144" />
<icon src="resources/ios/icon/icon-76.png" gap:platform="ios" width="76" height="76" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="152" height="152" />
<icon src="resources/ios/icon/icon-small.png" gap:platform="ios" width="29" height="29" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="58" height="58" />
<icon src="resources/ios/icon/[email protected]" gap:platform="ios" width="87" height="87" />
<gap:splash src="resources/ios/splash/[email protected]~iphone.png" gap:platform="ios" width="640" height="1136" />
<gap:splash src="resources/ios/splash/Default-667h.png" gap:platform="ios" width="750" height="1334" />
<gap:splash src="resources/ios/splash/Default-736h.png" gap:platform="ios" width="1242" height="2208" />
<gap:splash src="resources/ios/splash/Default-Landscape-736h.png" gap:platform="ios" width="2208" height="1242" />
<gap:splash src="resources/ios/splash/[email protected]~ipad.png" gap:platform="ios" width="2048" height="1536" />
<gap:splash src="resources/ios/splash/Default-Landscape~ipad.png" gap:platform="ios" width="1024" height="768" />
<gap:splash src="resources/ios/splash/[email protected]~ipad.png" gap:platform="ios" width="1536" height="2048" />
<gap:splash src="resources/ios/splash/Default-Portrait~ipad.png" gap:platform="ios" width="768" height="1024" />
<gap:splash src="resources/ios/splash/[email protected]~iphone.png" gap:platform="ios" width="640" height="960" />
<gap:splash src="resources/ios/splash/Default~iphone.png" gap:platform="ios" width="320" height="480" />
<icon src="icon.png"/>
<gap:splash src="splash.png" />
<!-- so android doesnt' go bat shit crazy -->
<preference name="permissions" value="none"/>
<!-- plugins -->
<feature name="StatusBar">
<param name="ios-package" value="CDVStatusBar" onload="true"/>
</feature>
<gap:plugin name="cordova-plugin-statusbar" source="npm" version="1.0.0">
<param name="onload" value="true" />
</gap:plugin>
<gap:plugin name="cordova-plugin-splashscreen" source="npm" version="2.0.0" />
</widget>
一飲而盡任務:
// **** Build phonegap *****/
var PHONEGAP_BUILD_FOLDER = '../phonegap',
PHONEGAP_RAW_FOLDER = 'www',
IONIC_SOURCE_FOLDER = './www',
IONIC_RESOURCE_FOLDER = './resources'
PHONEGAP_ZIP_FILE = 'phonegap_build.zip';
gulp.task('phonegap', function(cb){
runSequence('clean_phonegap',
'copy_www',
'copy_resources',
'copy_phonegap_config_xml',
'copy_default_icon',
'copy_default_splash',
'zip_phonegap',
cb);
});
gulp.task('clean_phonegap', function(cb){
// clean our folder first
var phonegap_del_pattern = PHONEGAP_BUILD_FOLDER + '/*';
del([phonegap_del_pattern], {force: true}, cb);
})
gulp.task('copy_www', function(){
var target_phonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER
return gulp.src([IONIC_SOURCE_FOLDER + '/**'])
.on('error', swallowError)
.pipe(gulp.dest(target_phonegap_folder))
})
gulp.task('copy_phonegap_config_xml', function(){
var target_phonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER
return gulp.src(['config_phonegap.xml'])
.on('error', swallowError)
.pipe(rename('config.xml'))
.pipe(gulp.dest(target_phonegap_folder));
})
gulp.task('copy_resources', function(){
var target_phonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER + '/resources',
exclude_pattern = '!' + IONIC_RESOURCE_FOLDER + '/_source_assets{,/**}'
// exclude pattern needs to go first. mother fucker.
return gulp.src([exclude_pattern, IONIC_RESOURCE_FOLDER + '/**'])
.on('error', swallowError)
.pipe(gulp.dest(target_phonegap_folder));
})
gulp.task('copy_default_icon', function(){
var target_phonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER;
return gulp.src([IONIC_RESOURCE_FOLDER + '/ios/icon.png' ])
.on('error', swallowError)
.pipe(gulp.dest(target_phonegap_folder));
})
gulp.task('copy_default_splash', function(){
var target_phonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER;
return gulp.src([IONIC_RESOURCE_FOLDER + '/splash.png' ])
.on('error', swallowError)
.pipe(gulp.dest(target_phonegap_folder));
})
gulp.task('zip_phonegap', function(){
var sourcephonegap_folder = PHONEGAP_BUILD_FOLDER + '/' + PHONEGAP_RAW_FOLDER
return gulp.src(sourcephonegap_folder + '/**')
.pipe(zip('phonegap.zip'))
.on('error', swallowError)
.pipe(gulp.dest(PHONEGAP_BUILD_FOLDER));
})
w--的帖子很有幫助,但我真的不需要那麼多階段來完成我的任務。另外,我的config.xml似乎可以在PhoneGap Build中正常工作。因此,這種單一飲而盡任務將拉鍊拉上www和config.xml中爲.zip文件:
gulp.task('phonegap_zip', function(){
return gulp.src(['./www/**', './config.xml'])
.pipe(zip('phonegap.zip'))
.pipe(gulp.dest('./phonegap/'));
});
如果你想自動生成的PhoneGap構建配置文件,使用:
npm install pgb-config-maker --save
./make-config-xml.sh
下一個命令:
phonegap remote build ios
您可以使用離子包進行。他們提供100個構建/月。
它的文檔都可以在這裏:http://docs.ionic.io/services/package/#summary
如果你需要將它發送到iTunes Connect,您可以使用此:https://software.intel.com/en-us/forums/intel-xdk/topic/670364#comment-1895468
我無法相信這個問題是越來越缺乏關注。 – 2015-06-01 22:51:31