[ 
https://issues.apache.org/jira/browse/CB-8326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

DotNetWise updated CB-8326:
---------------------------
    Description: 
SCurrently if you do 
cordova build ios  --device CODE_SIGN_IDENTITY='iPhone Developer: 
ABCD(1X23456789)' 
PROVISIONING_PROFILE='/usr/local/provisions/ABC_Development.mobileprovision'

You'll get an error that CODE_SIGN_IDENTITY is not a known platform.

This is absolutely rubbish, as there is no real way to send arguments directly 
to xcodebuild e.g. for directly build & sign an .ipa

We have tweaked locally the code, but every cordova release is making it a pain 
in the ass to reapply the changes.

PLEASE Make sure you allow anyother parameters to be sent to the actual build 
comand.

For the GOD sake only include KnownPlatforms as platforms and everything else 
send it to the actual build command.

We have added this code to cli.js

var tokens = remain.slice(1);
        tokens.forEach(function (option, index) {
                console.log("option", option, 
cordova_lib.cordova_platforms.hasOwnProperty(option));
                if (cordova_lib.cordova_platforms.hasOwnProperty(option)) {
                        opts.platforms.push(option);
                } else {
                        opts.options.push(option);
                }
        });

And commented this one out
        //var badPlatforms = _.difference(opts.platforms, known_platforms);
        //badPlatforms.forEach(function (option) {
        //      opts.options.push(option);
        //});
        //if( !_.isEmpty(badPlatforms) ) {
        //    msg = 'Unknown platforms: ' + badPlatforms.join(', ');
        //    throw new CordovaError(msg);
        //}

Also commented this one

//opts.options = downstreamArgs.concat(unparsedArgs);

And works great.

Then in your project template you should forward the arguments in file 
platforms/xxxx/cordova/build

e.g. for IOS

CONFIGURATION=Debug
EMULATOR=1
DEVICE=0
declare -a SCHEME
SCHEME=("-target" "$PROJECT_NAME")
i=0
args=
for a; do
        ((i++));
        case "$a" in
        --debug) echo "ARG --debug";;
        --release) CONFIGURATION=Release;echo "ARG --release";;
        --device) EMULATOR=0;echo "ARG --device";;
        --emulator) echo "ARG --emulator";;
                -scheme) ((i++)); SCHEME=("-scheme" $i);echo "ARG=-scheme $i";;
                -target) ((i++)); SCHEME=("-target" $i);echo "ARG=-target $i";;
                PROVISIONING_PROFILE*) echo "ARG=$a";mp=${a:21}; uuid=`grep 
-aA1 UUID ${mp} | grep -o "[-A-Z0-9]\{36\}"`;args="$args 
PROVISIONING_PROFILE=\"$uuid\"";echo "       => extracted uuid=$uuid";;
        *) echo "ARG=$a";args="$args \"$a\"";;
    esac
    shift
done
eval set -- $args
set +x;

if (( $EMULATOR )); then
    exec xcodebuild -project "$PROJECT_NAME.xcodeproj" -arch i386 -target 
"$PROJECT_NAME" -configuration $CONFIGURATION -sdk iphonesimulator build 
VALID_ARCHS="i386" CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/emulator" 
SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
else
    exec xcodebuild -xcconfig "$CORDOVA_PATH/build$(echo -$CONFIGURATION | tr 
'[:upper:]' '[:lower:]').xcconfig" -project "$PROJECT_NAME.xcodeproj" 
ARCHS="armv7 armv7s arm64" "${SCHEME[@]}" -configuration $CONFIGURATION -sdk 
iphoneos build VALID_ARCHS="armv7 armv7s arm64" 
CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/device" 
SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
fi


Notice the "$@" that was missing from your templates

  was:
Currently if you do 
cordova build ios  --device CODE_SIGN_IDENTITY='iPhone Developer: 
ABCD(1X23456789)' 
PROVISIONING_PROFILE='/usr/local/provisions/ABC_Development.mobileprovision'

You'll get an error that CODE_SIGN_IDENTITY is not a known platform.

This is absolutely rubbish, as there is no real way to send arguments directly 
to xcodebuild e.g. for directly build & sign an .ipa

We have tweaked locally the code, but every cordova release is making it a pain 
in the ass to reapply the changes.

PLEASE Make sure you allow anyother parameters to be sent to the actual build 
comand.

For the GOD sake only include KnownPlatforms as platforms and everything else 
send it to the actual build command.

We have added this code to cli.js

var tokens = remain.slice(1);
        tokens.forEach(function (option, index) {
                console.log("option", option, 
cordova_lib.cordova_platforms.hasOwnProperty(option));
                if (cordova_lib.cordova_platforms.hasOwnProperty(option)) {
                        opts.platforms.push(option);
                } else {
                        opts.options.push(option);
                }
        });

And commented this one out
        //var badPlatforms = _.difference(opts.platforms, known_platforms);
        //badPlatforms.forEach(function (option) {
        //      opts.options.push(option);
        //});
        //if( !_.isEmpty(badPlatforms) ) {
        //    msg = 'Unknown platforms: ' + badPlatforms.join(', ');
        //    throw new CordovaError(msg);
        //}

Also commented this one

//opts.options = downstreamArgs.concat(unparsedArgs);

And works great.

Then in your project template you should forward the arguments in file 
platforms/xxxx/cordova/build

e.g. for IOS

CONFIGURATION=Debug
EMULATOR=1
DEVICE=0
declare -a SCHEME
SCHEME=("-target" "$PROJECT_NAME")
i=0
args=
for a; do
        ((i++));
        case "$a" in
        --debug) echo "ARG --debug";;
        --release) CONFIGURATION=Release;echo "ARG --release";;
        --device) EMULATOR=0;echo "ARG --device";;
        --emulator) echo "ARG --emulator";;
                -scheme) ((i++)); SCHEME=("-scheme" $i);echo "ARG=-scheme $i";;
                -target) ((i++)); SCHEME=("-target" $i);echo "ARG=-target $i";;
                PROVISIONING_PROFILE*) echo "ARG=$a";mp=${a:21}; uuid=`grep 
-aA1 UUID ${mp} | grep -o "[-A-Z0-9]\{36\}"`;args="$args 
PROVISIONING_PROFILE=\"$uuid\"";echo "       => extracted uuid=$uuid";;
        *) echo "ARG=$a";args="$args \"$a\"";;
    esac
    shift
done
eval set -- $args
set +x;

if (( $EMULATOR )); then
    exec xcodebuild -project "$PROJECT_NAME.xcodeproj" -arch i386 -target 
"$PROJECT_NAME" -configuration $CONFIGURATION -sdk iphonesimulator build 
VALID_ARCHS="i386" CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/emulator" 
SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
else
    exec xcodebuild -xcconfig "$CORDOVA_PATH/build$(echo -$CONFIGURATION | tr 
'[:upper:]' '[:lower:]').xcconfig" -project "$PROJECT_NAME.xcodeproj" 
ARCHS="armv7 armv7s arm64" "${SCHEME[@]}" -configuration $CONFIGURATION -sdk 
iphoneos build VALID_ARCHS="armv7 armv7s arm64" 
CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/device" 
SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
fi


Notice the "$@" that was missing from your templates


> Allow arguments to be sent to the build comand e.g. xcodebuild
> --------------------------------------------------------------
>
>                 Key: CB-8326
>                 URL: https://issues.apache.org/jira/browse/CB-8326
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: CLI, CordovaJS, CordovaLib
>    Affects Versions: 3.5.0, 4.0.0, 3.6.3, 3.7.1, 4.1.3
>         Environment: All
>            Reporter: DotNetWise
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> SCurrently if you do 
> cordova build ios  --device CODE_SIGN_IDENTITY='iPhone Developer: 
> ABCD(1X23456789)' 
> PROVISIONING_PROFILE='/usr/local/provisions/ABC_Development.mobileprovision'
> You'll get an error that CODE_SIGN_IDENTITY is not a known platform.
> This is absolutely rubbish, as there is no real way to send arguments 
> directly to xcodebuild e.g. for directly build & sign an .ipa
> We have tweaked locally the code, but every cordova release is making it a 
> pain in the ass to reapply the changes.
> PLEASE Make sure you allow anyother parameters to be sent to the actual build 
> comand.
> For the GOD sake only include KnownPlatforms as platforms and everything else 
> send it to the actual build command.
> We have added this code to cli.js
> var tokens = remain.slice(1);
>       tokens.forEach(function (option, index) {
>               console.log("option", option, 
> cordova_lib.cordova_platforms.hasOwnProperty(option));
>               if (cordova_lib.cordova_platforms.hasOwnProperty(option)) {
>                       opts.platforms.push(option);
>               } else {
>                       opts.options.push(option);
>               }
>       });
> And commented this one out
>         //var badPlatforms = _.difference(opts.platforms, known_platforms);
>         //badPlatforms.forEach(function (option) {
>         //    opts.options.push(option);
>         //});
>         //if( !_.isEmpty(badPlatforms) ) {
>         //    msg = 'Unknown platforms: ' + badPlatforms.join(', ');
>         //    throw new CordovaError(msg);
>         //}
> Also commented this one
> //opts.options = downstreamArgs.concat(unparsedArgs);
> And works great.
> Then in your project template you should forward the arguments in file 
> platforms/xxxx/cordova/build
> e.g. for IOS
> CONFIGURATION=Debug
> EMULATOR=1
> DEVICE=0
> declare -a SCHEME
> SCHEME=("-target" "$PROJECT_NAME")
> i=0
> args=
> for a; do
>       ((i++));
>       case "$a" in
>         --debug) echo "ARG --debug";;
>         --release) CONFIGURATION=Release;echo "ARG --release";;
>         --device) EMULATOR=0;echo "ARG --device";;
>         --emulator) echo "ARG --emulator";;
>               -scheme) ((i++)); SCHEME=("-scheme" $i);echo "ARG=-scheme $i";;
>               -target) ((i++)); SCHEME=("-target" $i);echo "ARG=-target $i";;
>               PROVISIONING_PROFILE*) echo "ARG=$a";mp=${a:21}; uuid=`grep 
> -aA1 UUID ${mp} | grep -o "[-A-Z0-9]\{36\}"`;args="$args 
> PROVISIONING_PROFILE=\"$uuid\"";echo "       => extracted uuid=$uuid";;
>         *) echo "ARG=$a";args="$args \"$a\"";;
>     esac
>     shift
> done
> eval set -- $args
> set +x;
> if (( $EMULATOR )); then
>     exec xcodebuild -project "$PROJECT_NAME.xcodeproj" -arch i386 -target 
> "$PROJECT_NAME" -configuration $CONFIGURATION -sdk iphonesimulator build 
> VALID_ARCHS="i386" CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/emulator" 
> SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
> else
>     exec xcodebuild -xcconfig "$CORDOVA_PATH/build$(echo -$CONFIGURATION | tr 
> '[:upper:]' '[:lower:]').xcconfig" -project "$PROJECT_NAME.xcodeproj" 
> ARCHS="armv7 armv7s arm64" "${SCHEME[@]}" -configuration $CONFIGURATION -sdk 
> iphoneos build VALID_ARCHS="armv7 armv7s arm64" 
> CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build/device" 
> SHARED_PRECOMPS_DIR="$PROJECT_PATH/build/sharedpch" "$@"
> fi
> Notice the "$@" that was missing from your templates



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to