4 votos

Empresa de Instalación de la Aplicación en iOS que es demasiado viejo

Disponemos de una empresa de la aplicación para la que estamos finalizando el apoyo de iOS6. Durante una prueba reciente, hemos creado una versión de la aplicación, y establezca los siguientes valores en Info.plist

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

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

Como estábamos de pruebas, se espera que cuando se intentó instalar en iOS6 que la instalación sería rechazada temprano en el proceso, ya que se instala en una versión incompatible de iOS. Anticipamos que la versión previamente instalada de la aplicación siga funcionando como lo hacía antes, sin todas las nuevas características.

En lugar de eso, lo que ocurrió fue que el error de instalación que sucedió más tarde en la instalación de lo esperado, y la versión antigua de la app era inutilizable después de la actualización ha fallado.

A comprobar un par de cosas, he descargado el archivo IPA, y descomprimido. Dentro de los paquetes de Información.plist, veo esto:

MinimumOSVersion = "7.0";

cual 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 regular las aplicaciones, es decir, las aplicaciones de la App Store de iOS, no se le da la opción de instalar aplicaciones para que tus instalado iOS es demasiado viejo, y la versión instalada de la aplicación permanece sin cambios.

Hay una manera de hacer una cosa para las Aplicaciones Empresariales sin tener que construir todo lo que fuera? Estoy pensando que tal vez hay un ajuste en el manifiesto.plist que se utiliza para la OTA de la implementación.

En aras de la exhaustividad, aquí está mi Información.plist antes de construir:

<?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 dentro de la 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" );
}

El manifiesto.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 apreciados.

2voto

Random832 Puntos 475

No creo que es posible hacer.

Si usted está utilizando un navegador basado en la implementación siempre se puede comprobar la existencia de una versión del sistema operativo desde el navegador y la fuerza de esa manera.

Puede utilizar la Solicitud.UserAgent para obtener la versión del sistema operativo y, a continuación, JQuery para desactivar el botón y lanzar una alerta de explicar al usuario por qué no se 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);
        }

2voto

Buscar웃 Puntos 23467

He encontrado que:

No debe especificar MinimumOSVersion en su Información.plist.

En lugar de ver esto por la orientación de la Información de la Lista de propiedades Clave de referencia:

Information Property List key ref

0voto

Ashley Puntos 2261

(Esta no es una respuesta apropiada, pero es demasiado largo para un comentario.)

Yo no sé mucho acerca de Xamarin, pero en Xcode, el entorno en el que se especifica el mínimo de la versión de iOS se necesita se llama el despliegue de destino. Ver este stackoverflow de preguntas y respuestas para un par de enlaces a algunos detalles.

De acuerdo a este artículo, una de las consecuencias de establecer el destino de la implementación es agregar un MinimumOSVersion cadena de la Información.plist archivo, pero tal vez hay otros también (en el propio binario?).

Si no has probado ya, trate de buscar los detalles sobre la "implementación de destino" en lugar de MinimumOSVersion. También, quizás, considere preguntar a su pregunta en stackoverflow?

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X