Sto provando a compilare la mia app Ionic con PhoneGap Build (sto lavorando con un Mac, quindi non posso compilare iOS in altro modo).Ionic Framework + PhoneGap Build: workflow
Qual è il miglior flusso di lavoro?
Grazie
Sto provando a compilare la mia app Ionic con PhoneGap Build (sto lavorando con un Mac, quindi non posso compilare iOS in altro modo).Ionic Framework + PhoneGap Build: workflow
Qual è il miglior flusso di lavoro?
Grazie
Questo è il mio tentativo di rispondere a questa (si prega di aiuto mi aggiorno questo modo tutti possono beneficiare):
creare l'app con ionica:
ionic start myApp sidemenu
etc...
In un default ionico app il file config.xml si trova nella directory root, sopra la cartella www/
, quindi spostarlo nella cartella www/
per PhoneEdap Build per trovarlo.
mv config.xml www/
Poi zip
la cartella www/
o git push
dal computer locale al repository git remota che si è collegato con PhoneGap costruire. Solo zip o push in questa directory, perché se lasci che le altre directory siano presenti nella directory root Ionic, come node_modules, la tua app sarà troppo grande per essere compilata su PhoneGap Build.
Quindi compilare su PhoneGap Build.
Dopo aver combattuto per tutta la notte e per tutta la mattina, ho trovato una soluzione furba.
Spero che aiuti qualcuno.
Come di v1.0 ionica, almeno per il mio progetto semplicistico, la più grande differenza è solo
Quello che ho fatto:
modifiche config.xml:
aggiunte gulp:
Ciò significa che il mio flusso di lavoro di costruzione (fino a quando ho bisogno di cambiare qualcosa in config.xml) appare come segue:
gulp phonegap
Ovviamente un sacco di spazio per migliorare qui, ma avevo bisogno di qualcosa che posso utilizzare per pubblicare ora. Prima di creare un config_phonegap.xml statico ho esplorato alcune idee come l'analisi XML in JS o la creazione di un file XSLT. Per la quantità di sforzo, a questo punto sembrava un ritorno basso, quindi non ho seguito.
Ecco bit di codice rilevanti per riferimento
Regex:
### 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" />
campione PhoneGap config.xml compatibile:
<?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>
compiti gulp:
// **** 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-- Il post di s era utile, ma non avevo davvero bisogno di molte fasi per il mio compito. Inoltre, il mio file config.xml sembra funzionare correttamente con PhoneGap Build. Quindi, questa singola operazione sorso sarà comprimere www e config.xml in un file .zip:
gulp.task('phonegap_zip', function(){
return gulp.src(['./www/**', './config.xml'])
.pipe(zip('phonegap.zip'))
.pipe(gulp.dest('./phonegap/'));
});
Se si desidera generare automaticamente il file di configurazione per PhoneGap costruire, utilizzare questo:
npm install pgb-config-maker --save
./make-config-xml.sh
Prossimo comando:
phonegap remote build ios
Si può fare con Ionic Package. Offrono 100 build/mo.
La documentazione per esso sono disponibili qui: http://docs.ionic.io/services/package/#summary
Se è necessario inviarlo a iTunes Connect, è possibile utilizzare questo: https://software.intel.com/en-us/forums/intel-xdk/topic/670364#comment-1895468
Non posso credere che la mancanza di attenzione a questa domanda sta ottenendo. –