gpt4 book ai didi

cordova - ionic 框架 + Phonegap 构建 : workflow

转载 作者:行者123 更新时间:2023-12-04 03:20:28 26 4
gpt4 key购买 nike

我正在尝试使用 Phonegap Build 编译我的 Ionic 应用程序(我正在使用 Mac,所以我无法编译到 iOS)。

最好的工作流程是什么?

谢谢

最佳答案

经过一整夜和整个早上的斗争,我想出了一个骇人听闻的解决方案。
希望它可以帮助某人。

从 ionic v1.0 开始,至少对于我这个简单的项目来说,最大的区别就是

  • config.xml
  • 所有图像 Assets 都在 ./resources

  • 我做了什么:
    config.xml 更改:
  • 基于 config.xml 在 .www/config_phonegap.xml 中创建了一个新文件
  • 在小部件节点上将命名空间更改为 phonegap (xmlns:gap="http://phonegap.com/ns/1.0")
  • 使用正则表达式搜索替换将所有图标和飞溅标签更改为对应的 phonegap 等效项
  • 为任何插件手动创建必要的“gap:plugin”标签

  • 吞咽添加:
  • 创建了一个 gulp 任务将 .www/复制到 ./phonegap 文件夹
  • gulp 任务也复制资源
  • gulp 任务复制 config_phonegap.xml 并将其重命名为 config.xml
  • gulp 任务来压缩我们的新 www 文件夹。 (zip 文件中不应该有顶级 www。即我们只想压缩 www 的内容)

  • 这意味着我的构建工作流程(直到我需要更改 config.xml 中的某些内容)现在看起来像这样:
  • gulp phonegap
  • 上传 phonegap.zip 到 https://build.phonegap.com

  • 显然这里有很多需要改进的地方,但我需要一些我现在可以用来发布的东西。在制作静态 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="([~@\.\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="blah@diblah.com" 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/icon@2x.png" 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/icon-40@2x.png" 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/icon-50@2x.png" 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/icon-60@2x.png" gap:platform="ios" width="120" height="120" />
    <icon src="resources/ios/icon/icon-60@3x.png" 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/icon-72@2x.png" 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/icon-76@2x.png" 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/icon-small@2x.png" gap:platform="ios" width="58" height="58" />
    <icon src="resources/ios/icon/icon-small@3x.png" gap:platform="ios" width="87" height="87" />
    <gap:splash src="resources/ios/splash/Default-568h@2x~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/Default-Landscape@2x~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/Default-Portrait@2x~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/Default@2x~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));
    })

    关于cordova - ionic 框架 + Phonegap 构建 : workflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408363/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com