Mamy aplikację dla przedsiębiorstw, dla której kończymy wsparcie dla iOS6. Podczas ostatniego testu stworzyliśmy wersję aplikacji i ustawiliśmy następujące wartości w Info.plist
<key>MinimumOSVersion</key>
<string>7.0</string>
Aplikacja została zbudowana z pakietem iOS 7.1 SDK. Jeśli ma to znaczenie (i nie jestem pewien, czy tak), jest to projekt Xamarin.iOS.
Podczas testowania spodziewaliśmy się, że kiedy będziemy próbować zainstalować na iOS6, instalacja zostanie odrzucona na początku procesu, ponieważ instalujemy na nieobsługiwanej wersji iOS. Spodziewaliśmy się, że wcześniej zainstalowana wersja aplikacji będzie nadal działać tak, jak wcześniej, bez wszystkich nowych funkcji.
Zamiast tego zdarzyło się, że błąd instalacji nastąpił później w trakcie instalacji niż oczekiwano, a stara wersja aplikacji była niezdatna do użytku po niepowodzeniu aktualizacji.
Aby dokładnie sprawdzić kilka rzeczy, pobrałem plik IPA i rozpakowałem go. W pakiecie Info.plist widzę to:
MinimumOSVersion = "7.0";
co jest dobrym znakiem. Myślę jednak, że wyjaśnia to również, dlaczego próba instalacji zepsuła poprzednio zainstalowaną wersję.
W przypadku zwykłych aplikacji, tj. Aplikacji ze sklepu iOS App Store, nie ma opcji instalowania aplikacji, dla których zainstalowany system iOS jest zbyt stary, a zainstalowana wersja aplikacji pozostaje niezmieniona.
Czy istnieje sposób na zrobienie czegoś takiego w przypadku aplikacji dla przedsiębiorstw bez konieczności budowania wszystkiego? Myślę, że być może w manifest manifest.pl jest ustawienie używane do wdrażania OTA.
Dla zachowania dokładności, oto moja Info.plist przed kompilacją:
<?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 z 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" );
}
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>
Wszelkie sugestie są mile widziane.
źródło
Odpowiedzi:
Nie sądzę, że można to zrobić.
Jeśli korzystasz z wdrożenia internetowego, zawsze możesz sprawdzić wersję systemu operacyjnego w przeglądarce i wymusić to w ten sposób.
Możesz użyć Request.UserAgent, aby uzyskać wersję systemu operacyjnego, a następnie JQuery, aby wyłączyć przycisk i wysłać alert wyjaśniający użytkownikowi, dlaczego nie może pobrać.
źródło
Znalazłem to:
Nie należy tego określać
MinimumOSVersion
w Info.plist.Zamiast tego zobacz to w celu uzyskania informacji Informacje Lista właściwości Kluczowe odniesienie:
źródło
(To nie jest poprawna odpowiedź, ale jest za długa na komentarz).
Nie wiem dużo o Xamarinie, ale w Xcode ustawienie określające minimalną wymaganą wersję iOS nazywa się celem wdrożenia . Zobacz to pytanie i odpowiedzi na temat przepełnienia stosu, aby uzyskać kilka linków do niektórych szczegółów.
Zgodnie z tym artykułem , jedną z konsekwencji ustawienia celu wdrożenia jest dodanie ciągu MinimumOSVersion do pliku Info.plist, ale być może są też inne (w samym pliku binarnym?).
Jeśli jeszcze tego nie próbowałeś, spróbuj wyszukać szczegółowe informacje na temat „miejsca docelowego wdrożenia” zamiast MinimumOSVersion. Może zastanawiasz się również nad pytaniem o przepełnienie stosu?
źródło