Instalación de la aplicación Enterprise en iOS que es demasiado antigua

4

Tenemos una aplicación empresarial para la cual estamos finalizando el soporte de iOS6. Durante una prueba reciente, creamos una compilación de la aplicación y establecimos los siguientes valores en Info.plist

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

La aplicación fue construida con el iOS 7.1 SDK. Si importa (y no estoy seguro de que lo haga), es un proyecto Xamarin.iOS.

Mientras estábamos probando, esperábamos que cuando intentáramos instalar en iOS6 la instalación fuera rechazada al principio del proceso, ya que estábamos instalando en una versión no compatible de iOS. Anticipamos que la versión instalada previamente de la aplicación continuaría funcionando como lo había hecho antes, sin todas las nuevas características.

En cambio, lo que sucedió fue que el error de instalación ocurrió más tarde en la instalación de lo esperado y que la versión anterior de la aplicación no se podía utilizar después de que fallara la actualización.

Para volver a verificar un par de cosas, descargué el archivo IPA y lo descomprimí. Dentro del Info.plist incluido, veo esto:

MinimumOSVersion = "7.0";

que es una buena señal. Sin embargo, creo que también explica por qué el intento de instalación rompió la versión instalada anteriormente.

Para las aplicaciones normales, es decir, las aplicaciones de la tienda de aplicaciones de iOS, no tiene la opción de instalar aplicaciones para las cuales su iOS instalado es demasiado antiguo, y la versión instalada de la aplicación permanece sin cambios.

¿Hay una manera de hacer algo así para las aplicaciones empresariales sin tener que construir todo? Estoy pensando que tal vez haya una configuración en el archivo manifest.plist que se usa para la implementación de OTA.

En aras de la minuciosidad, aquí está mi lista de información antes de compilar:

<?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 desde la API:

// !!! 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" );
}

The 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>

Cualquier y todas las sugerencias son apreciadas.

    
pregunta Kirk 25.04.2014 - 23:11

3 respuestas

2

No creo que sea posible hacerlo.

Si está utilizando una implementación basada en web, siempre puede verificar una versión del sistema operativo desde el navegador y forzarla de esa manera.

Puede usar Request.UserAgent para obtener la versión del sistema operativo y luego JQuery para deshabilitar el botón y lanzar una alerta que explica al usuario por qué no puede descargar.

        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);
        }
    
respondido por el Matt Bentley 05.05.2014 - 13:45
2

Encontré que:

No debes especificar MinimumOSVersion en tu Info.plist.

En su lugar, vea esto como guía Información Lista de propiedades Referencia clave:

    
respondido por el Buscar웃 30.04.2014 - 22:00
0

(Esta no es una respuesta adecuada, pero es demasiado larga para un comentario).

No sé mucho acerca de Xamarin, pero en Xcode, la configuración que especifica la versión mínima de iOS requerida se llama el objetivo de implementación . Vea esta pregunta de stackoverflow y respuestas para algunos enlaces a algunos detalles.

De acuerdo a esto El artículo , una de las consecuencias de establecer el destino de la implementación es agregar una cadena MinimumOSVersion al archivo Info.plist, pero quizás haya otras también (¿en el binario en sí?).

Si aún no lo ha intentado, intente buscar detalles sobre "destino de implementación" en lugar de MinimumOSVersion. ¿Quizás también considere hacer su pregunta sobre stackoverflow?

    
respondido por el Ashley 02.05.2014 - 12:42

Lea otras preguntas en las etiquetas