Installazione app aziendale su iOS troppo vecchia

4

Abbiamo un'app aziendale per la quale stiamo finendo il supporto di iOS6. Durante un recente test, abbiamo creato una build dell'app e impostato i seguenti valori in Info.plist

<key>MinimumOSVersion</key>
<string>7.0</string>

L'app è stata creata con l'SDK di iOS 7.1. Se è importante (e non sono sicuro che lo faccia), è un progetto Xamarin.iOS.

Mentre stavamo testando, ci aspettavamo che quando abbiamo tentato di installare su iOS6 che l'installazione fosse stata rifiutata all'inizio del processo, dal momento che stavamo installando su una versione non supportata di iOS. Abbiamo anticipato che la versione dell'app precedentemente installata avrebbe continuato a funzionare come prima, senza tutte le nuove funzionalità.

Invece quello che è successo è che il guasto dell'installazione è avvenuto più tardi nell'installazione del previsto e la vecchia versione dell'app era inutilizzabile dopo l'aggiornamento fallito.

Per ricontrollare un paio di cose, ho scaricato il file IPA e l'ho decompresso. All'interno del pacchetto Info.plist, vedo questo:

MinimumOSVersion = "7.0";

che è un buon segno. Tuttavia, penso che spieghi anche il motivo per cui la tentata installazione ha rotto la versione precedentemente installata.

Per le app normali, ad esempio app da iOS App Store, non ti viene offerta l'opzione di installare applicazioni per cui iOS installato è troppo vecchio e la versione installata dell'app rimane invariata.

C'è un modo per fare una cosa del genere per le App Enterprise senza dover costruire tutto? Sto pensando che forse esiste un'impostazione in manifest.plist che viene utilizzata per la distribuzione OTA.

Per motivi di completezza, ecco il mio Info.plist prima della compilazione:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDisplayName</key>
    <string>OurApp Stage</string>
    <key>CFBundleIconFiles</key>
    <array>
        <string>Images/OurApp_72.png</string>
        <string>Images/OurApp_50.png</string>
        <string>Images/OurApp_29.png</string>
        <string>Images/OurApp_512.png</string>
    </array>
    <key>CFBundleIdentifier</key>
    <string>com.ourappproject.staging.mycompany</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.ourappproject.staging-handler</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>ourapp-staging</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>2014.2.04.05</string>
    <key>MinimumOSVersion</key>
    <string>7.0</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>audio</string>
    </array>
    <key>UIDeviceFamily</key>
    <array>
        <integer>2</integer>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>
</plist> 

Info.plist dall'interno dell'IPA:

// !!! BINARY PROPERTY LIST WARNING !!!
//
// The pretty-printed property list below has been created
// from a binary version on disk and should not be saved as
// the ASCII format is a subset of the binary representation!
//
{   BuildMachineOSBuild = "13C1021";
    CFBundleDevelopmentRegion = "en";
    CFBundleDisplayName = "OurApp Stage";
    CFBundleExecutable = "OurAppMobileApp";
    CFBundleIconFiles = ( "OurApp_72.png", "OurApp_50.png", "OurApp_29.png" );
    CFBundleIdentifier = "com.ourappproject.staging.mycompany";
    CFBundleInfoDictionaryVersion = "6.0";
    CFBundleName = "OurAppMobileApp";
    CFBundlePackageType = "APPL";
    CFBundleResourceSpecification = "ResourceRules.plist";
    CFBundleSignature = "????";
    CFBundleSupportedPlatforms = ( "iPhoneOS" );
    CFBundleURLTypes = (
        {   CFBundleURLName = "com.ourappproject.staging-handler";
            CFBundleURLSchemes = ( "ourapp-staging" );
        },
    );
    CFBundleVersion = "2014.2.04.05";
    DTCompiler = "com.apple.compilers.llvm.clang.1_0";
    DTPlatformBuild = "11D167";
    DTPlatformName = "iphoneos";
    DTPlatformVersion = "7.1";
    DTSDKBuild = "11D167";
    DTSDKName = "iphoneos7.1";
    DTXcode = "0510";
    DTXcodeBuild = "5B1008";
    LSRequiresIPhoneOS = :true;
    MinimumOSVersion = "7.0";
    UIBackgroundModes = ( "audio" );
    UIDeviceFamily = ( 2 );
    UIRequiredDeviceCapabilities = ( "armv7" );
    UISupportedInterfaceOrientations = ( "UIInterfaceOrientationLandscapeLeft", "UIInterfaceOrientationLandscapeRight" );
    "UISupportedInterfaceOrientations~ipad" = ( "UIInterfaceOrientationLandscapeLeft", "UIInterfaceOrientationLandscapeRight" );
}

Il manifest.plist:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <!-- array of downloads. -->
        <key>items</key>
        <array>
            <dict>
                <!-- an array of assets to download -->
                <key>assets</key>
                <array>
                    <!-- software-package: the ipa to install. -->
                    <dict>
                        <!-- required.  the asset kind. -->
                        <key>kind</key>
                        <string>software-package</string>
                        <!-- required.  the URL of the file to download. -->
                        <key>url</key>
                        <string>https://arm.staging.ourappproject.com:443/Store/App/9/17/OurAppMobileApp.ipa</string>
                    </dict>
                    <!-- display-image: the icon to display during download .-->
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <!-- optional.  indicates if icon needs shine effect applied. -->
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
                        <string>https://arm.staging.ourappproject.com:443/Assets/OurAppMobileApp.png</string>
                    </dict>
                    <!-- full-size-image: the large 512x512 icon used by iTunes. -->
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>needs-shine</key>
                        <true/>
                        <key>url</key>
                        <string>https://arm.staging.ourappproject.com:443/Assets/OurApp_512.png</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <!-- required -->
                    <key>bundle-identifier</key>
                    <string>com.ourappproject.staging.mycompany</string>
                    <!-- optional (software only) -->
                    <key>bundle-version</key>
                    <string>2014.2.04.05</string>
                    <!-- required.  the download kind. -->
                    <key>kind</key>
                    <string>software</string>
                    <!-- optional. displayed during download; typically company name -->
                    <key>subtitle</key>
                    <string>mycompany</string>
                    <!-- required.  the title to display during the download. -->
                    <key>title</key>
                    <string>OurApp Mobile</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

Tutti i suggerimenti sono apprezzati.

    
posta Kirk 25.04.2014 - 23:11
fonte

3 risposte

2

Non penso sia possibile farlo

Se si utilizza una distribuzione basata sul Web, è sempre possibile verificare la presenza di una versione del sistema operativo dal browser e forzarla in questo modo.

È possibile utilizzare Request.UserAgent per ottenere la versione del sistema operativo e poi JQuery per disabilitare il pulsante e lanciare un avviso che spiega all'utente perché non è possibile scaricare.

        string agent = Request.UserAgent;


        if (agent.Contains("iPad; CPU OS 6_"))
        {
            ClientScript.RegisterStartupScript(this.GetType(), "iOS",
                                               " $('#appInstall a').click(function(e) {e.preventDefault();});",
                                               true);
            ClientScript.RegisterStartupScript(this.GetType(), "iOSAlert",
                                               " $('#appInstall a').click(function() {alert('The application is now only available on iPads running iOS 7 or higher. Please upgrade your iPad to get the latest version.');});",
                                               true);
        }
    
risposta data 05.05.2014 - 13:45
fonte
2

L'ho trovato:

Non dovresti specificare MinimumOSVersion nel tuo Info.plist.

Per maggiori informazioni, consulta questo documento Elenco proprietà informazioni Codice di riferimento:

    
risposta data 30.04.2014 - 22:00
fonte
0

(Questa non è una risposta corretta, ma è troppo lunga per un commento.)

Non so molto su Xamarin, ma in Xcode, l'impostazione che specifica la versione minima di iOS richiesta è chiamata target di implementazione . Vedi questa domanda StackOverflow e risponde per alcuni link ad alcuni dettagli.

Secondo questo articolo , una delle conseguenze dell'impostazione dell'obiettivo di distribuzione è l'aggiunta di una stringa MinimumOSVersion al file Info.plist, ma forse ce ne sono anche altre (nel file binario stesso?).

Se non lo hai già provato, prova a cercare i dettagli su "target di distribuzione" anziché su MinimumOSVersion. Inoltre, potresti prendere in considerazione la possibilità di porre la tua domanda su StackOverflow?

    
risposta data 02.05.2014 - 12:42
fonte

Leggi altre domande sui tag