|
module.exports = function(grunt) { |
|
|
|
grunt.initConfig({ |
|
app: { |
|
name: 'App' |
|
}, |
|
clean: { |
|
plugins: ['plugins'], |
|
platforms: ['platforms'] |
|
}, |
|
mkdir: { |
|
'default': { |
|
options: { |
|
create: ['plugins', 'platforms'] |
|
} |
|
} |
|
}, |
|
copy: { |
|
platform_merges: { |
|
expand: true, |
|
dest: './platforms/', |
|
cwd: 'platform-merges', |
|
src: '**' |
|
}, |
|
resources_ios: { |
|
files: [ |
|
{src: ['www/res/icon/ios/icon-57.png'], dest: 'platforms/ios/<%= app.name %>/Resources/icons/icon.png'}, |
|
{src: ['www/res/icon/ios/icon-57-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/icons/icon@2x.png'}, |
|
{src: ['www/res/icon/ios/icon-72.png'], dest: 'platforms/ios/<%= app.name %>/Resources/icons/icon-72.png'}, |
|
{src: ['www/res/icon/ios/icon-72-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/icons/icon-72@2x.png'}, |
|
{src: ['www/res/screen/ios/screen-iphone-portrait.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default~iphone.png'}, |
|
{src: ['www/res/screen/ios/screen-iphone-portrait-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default@2x~iphone.png'}, |
|
{src: ['www/res/screen/ios/screen-iphone-portrait-568h-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default-568h@2x~iphone.png'}, |
|
{src: ['www/res/screen/ios/screen-ipad-portrait.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default-Portrait~ipad.png'}, |
|
{src: ['www/res/screen/ios/screen-ipad-portrait-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default-Portrait@2x~ipad.png'}, |
|
{src: ['www/res/screen/ios/screen-ipad-landscape.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default-Landscape~ipad.png'}, |
|
{src: ['www/res/screen/ios/screen-ipad-landscape-2x.png'], dest: 'platforms/ios/<%= app.name %>/Resources/splash/Default-Landscape@2x~ipad.png'} |
|
] |
|
}, |
|
resources_android: { |
|
files: [ |
|
{src: ['www/res/icon/android/icon-36-ldpi.png'], dest: 'platforms/android/res/drawable-ldpi/icon.png'}, |
|
{src: ['www/res/icon/android/icon-48-mdpi.png'], dest: 'platforms/android/res/drawable-mdpi/icon.png'}, |
|
{src: ['www/res/icon/android/icon-72-hdpi.png'], dest: 'platforms/android/res/drawable-hdpi/icon.png'}, |
|
{src: ['www/res/icon/android/icon-96-xhdpi.png'], dest: 'platforms/android/res/drawable-xhdpi/icon.png'}, |
|
{src: ['www/res/icon/android/icon-96-xhdpi.png'], dest: 'platforms/android/res/drawable/icon.png'}, |
|
{src: ['www/res/screen/android/screen-ldpi-portrait.png'], dest: 'platforms/android/res/drawable-ldpi/screen.png'}, |
|
{src: ['www/res/screen/android/screen-mdpi-portrait.png'], dest: 'platforms/android/res/drawable-mdpi/screen.png'}, |
|
{src: ['www/res/screen/android/screen-hdpi-portrait.png'], dest: 'platforms/android/res/drawable-hdpi/screen.png'}, |
|
{src: ['www/res/screen/android/screen-xhdpi-portrait.png'], dest: 'platforms/android/res/drawable-xhdpi/screen.png'}, |
|
{src: ['www/res/screen/android/screen-xhdpi-portrait.png'], dest: 'platforms/android/res/drawable/screen.png'} |
|
] |
|
} |
|
}, |
|
cordovacli: { |
|
options: { |
|
path: './' |
|
}, |
|
add_platforms: { |
|
options: { |
|
command: 'platform', |
|
action: 'add', |
|
platforms: ['ios', 'android'] |
|
} |
|
}, |
|
add_plugins: { |
|
options: { |
|
command: 'plugin', |
|
action: 'add', |
|
plugins: [ |
|
'console', |
|
'device', |
|
'geolocation', |
|
'network-information', |
|
'splashscreen', |
|
'https://github.com/phonegap-build/PushPlugin.git' |
|
] |
|
} |
|
}, |
|
build_ios: { |
|
options: { |
|
command: 'build', |
|
platforms: ['ios'] |
|
} |
|
}, |
|
build_android: { |
|
options: { |
|
command: 'build', |
|
platforms: ['android'] |
|
} |
|
}, |
|
prepare_ios: { |
|
options: { |
|
command: 'prepare', |
|
platforms: ['ios'] |
|
} |
|
}, |
|
prepare_android: { |
|
options: { |
|
command: 'prepare', |
|
platforms: ['android'] |
|
} |
|
}, |
|
serve: { |
|
options: { |
|
command: 'serve', |
|
port: 7000 |
|
} |
|
} |
|
}, |
|
watch: { |
|
src: { |
|
files: ['www/**/*.*', 'platform-merges/**/*.*'], |
|
tasks: ['update'] |
|
} |
|
}, |
|
connect: { |
|
server: { |
|
options: { |
|
port: 7000, |
|
hostname: 'localhost', |
|
base: 'www', |
|
keepalive: true |
|
} |
|
} |
|
} |
|
}); |
|
|
|
grunt.loadNpmTasks('grunt-contrib-clean'); |
|
grunt.loadNpmTasks('grunt-contrib-copy'); |
|
grunt.loadNpmTasks('grunt-contrib-watch'); |
|
grunt.loadNpmTasks('grunt-mkdir'); |
|
grunt.loadNpmTasks('grunt-cordovacli'); |
|
grunt.loadNpmTasks('grunt-contrib-connect'); |
|
|
|
grunt.registerTask('init', 'Initialize the development environment.',[ |
|
'clean', |
|
'mkdir', |
|
'cordovacli:add_platforms', |
|
'cordovacli:add_plugins', |
|
'update' |
|
]); |
|
|
|
grunt.registerTask('update', 'Update platforms.', [ |
|
'cordovacli:prepare_ios', |
|
'cordovacli:prepare_android', |
|
'copy' |
|
]); |
|
|
|
grunt.registerTask('build', 'Build Platforms.', [ |
|
'cordovacli:build_ios', |
|
'cordovacli:build_android', |
|
]); |
|
|
|
grunt.registerTask('server', ['connect:server']); |
|
grunt.registerTask('cordova-serve', "Alias for 'cordova serve'.", ['cordovacli:serve']); |
|
|
|
grunt.registerTask('default', ['watch']); |
|
|
|
}; |
That was the intended purpose of
platform-merges. This directory should follow the same structure asplatforms, but only contains customizations that need to be version controlled. The contents of theplatform-mergesdirectory will be copied toplatforms, replacing any Cordova generated content. For example to customize theplistfile for iOS, make the changes in xcode (or in any editor) and copy the file toplatform-merges/ios/App/App-Info.plist.Be aware that any file in
platform-mergeswill clobber its counterpart inplatformswhen any grunt command that callscopy:platform-mergesis run. There is still plenty of room for improvement in this process, but IMO it is still better than adding the entireplatformsdirectory to version control.