Ошибки возникающие при обновлении приложений на iOS 7

Содержание

Изменение цвета Status Bar в iOS 7

По умолчанию цвет статус бара во всех приложениях xamarin  (iOS 5.0 - iOS 7.0) - черный. С приходом iOS 7 стало возможным использовать пространство под статус баром (а это 20 пикслей) и шапка приложения со светлым текстом приложения и черным текстом статус бара смотрится не очень здорово.

Черный текст статус бар

Какого же было удивление, что просто так цвет текста не поменять. Необходимо было повозиться, причем для каждой платформы (iPhone + iPad) свое решение. А если используются xib файлы то решение совсем другое. Итак, по порядку.

iPad

С iPad все оказалось проще всего. Достаточно было добавить следующий код и все заработало. Однако здесь важная деталь: проект полностью xib-less, т. е. вся разметка создается из кода и XCode открывать не приходится.

       public override UIStatusBarStyle PreferredStatusBarStyle ()
        {
            return UIStatusBarStyle.LightContent;
        }

iPhone

Что касается iPhone, то пришлось повозиться довольно долго и история забрела очень глубоко в Xamarin, monotouch + xcode. Кратко опишу здесь. Самое популярное решение приведено выше. Вторым по популярности является использование следующей связки:

  1. В файле info.plist установить UIViewControllerBasedStatusBarAppearance=No
  2. В  AppDelegate, методе  FinishedLaunching вызвать код  
    app.SetStatusBarStyle (UIStatusBarStyle.LightContent, true);

 Такой метод сработал в одном из проектов, однако не в этом случае. При использовании частичной генерации представлений (xib файлы + разметка из кода) приходится ломать голову, чтобы придумать решение проблемы. Решение нашлось случайно. В одном из примеров xamarin-samples, скачанного по первой ссылке с github, в одном из проектов нашел строчку: 

NavigationController.NavigationBar.BarStyle = UIBarStyle.Black;

Ура! Использование этого свойства, а также определение RootViewController в AppDelegate сделали свое дело, итог получился куда более красивее начальной версии.

iOS 7 white status bar color

XCode 5 + iOS 5

Как и в прошлый раз, беда подкралась незаметно. А именно - критическая ошибка приложения при запуске на симуляторе с 5-й версией операционной системы. При этом код ошибки был следующий:

Message: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: The NIB data is invalid.

StackTrace: at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 …

Google выдает одну из первых строчек форум xamarin с топиком iOS7 with deployment target 5.0 results in “The NIB data is invalid”. Необходимо отметить, этот пост указать направление куда копать. Оказалось, что xib файлы компилируются XCode и создаются nib файлы. Далее уже xamarin использует эти nib файлы для компиляции приложения.

Дело все в том, что по умолчанию, когда создается проект xcode - он создается уже с использованием iOS 7 SDK. Если воспользовать помощью с форума, и изменить минимальную версию iOS в файле xib с использованием XCode так:

настройки компиляции xcode

то получим следующую ошибку: 

Error compiling in Xamarin Studio (osx): error CS1566: Error reading resource file 

На эту ошибку находим ответ на том же форуме: Error compiling in Xamarin Studio (osx): error CS1566: Error reading resource file. Но решение там в простом виде не оказалось. Дело в том, что эта настройка никак не влияет на компиляцию XCode (т. к. процедуру компиляции вызывает Xamarin Studio с настройками по умолчанию, для проекта xcode). Выглядит это следующим образом:

Building: Notissimus.Controls.iOS (Debug)
Performing main compilation…
Skipping project since output files are up to date
Build complete – 0 errors, 0 warnings

Building: Notissimus.UI.iPhone (Debug) Performing main compilation…

Compiling interface definitions /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool –errors –warnings –notices –output-format human-readable-text –compile “/Users/usere/Documents/Notissimus.UI.iPhone/obj/Debug/resources/ProductsScreen.nib” “/Users/user/Documents/Notissimus.UI.iPhone/Screens/ProductsScreen.xib” –sdk “/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk

Решение простое: необходимо в файле проекта xcodeproj изменить настройку по умолчанию, а предыдущие изменения (про Interface Builder Document) откатить.

Настройки xcode ios min version

Все работает!

Комментарии

comments powered by Disqus