iOS 10 beta, ciąg dalszy, witam serdecznie. Dziś parę słów o Xamarin.
Wszystkie potrzebne informacje znajdziemy na stronie Introduction to iOS 10.
W przeciwieństwie do Swift w C# nie trzeba było nic zmieniać! Dodałem jedynie obsługę nowego modelu uprawnień. Podobnie jak ostatnim razem w pliku Info.plist utworzyłem klucz NSAppleMusicUsageDescription. W przeciwieństwie do Xcode 8 musiałem zrobić to ręcznie edytując XML, gdzie wstawiłem:
<key>NSAppleMusicUsageDescription</key>
<string>This app uses your media library in order to track changes</string>
W klasie FileListViewController stworzyłem następujący kod:
public async override void ViewDidLoad()
{
…
if (UIDevice.CurrentDevice.CheckSystemVersion(9, 3))
{
var status = await MPMediaLibrary.RequestAuthorizationAsync();
if (status == MPMediaLibraryAuthorizationStatus.Authorized)
LoadMediaItemsForMediaTypeAsync(MPMediaType.Music);
else
DisplayMediaLibraryError();
}
else
{
LoadMediaItemsForMediaTypeAsync(MPMediaType.Music);
}
}
private void DisplayMediaLibraryError()
{
string error;
switch (MPMediaLibrary.AuthorizationStatus)
{
case MPMediaLibraryAuthorizationStatus.Restricted:
error = "Media library access restricted by corporate or parental settings";
break;
case MPMediaLibraryAuthorizationStatus.Denied:
error = "Media library access denied by user";
break;
default:
error = "Unknown error";
break;
}
var controller = UIAlertController.Create("Error", error, UIAlertControllerStyle.Alert);
controller.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
PresentViewController(controller, true, null);
}
W porównaniu nawet do Swift 3 C# ma większą elegancję jeśli chodzi o async. Widzimy już metody z API w tej postaci, jak choćby RequestAuthorizationAsync. Przy enumach wygrywa Swift. W C# musiałem za każdym razem pisać MPMediaLibraryAuthorizationStatus.*. Podczas tłumaczenia kodu wyszło, że klasy UIAlertController i UIAlertAction dla oczekiwanego zestawu parametrów zamiast typowego konstruktora mają w C# statyczne metody Create.
Wszystko działa jak w oryginale w Swift 3 i Xcode 8 beta. Na designerze w Visual Studio zaobserwowałem jedynie rysowanie linii łączych w innym miejscu niż łączonych przez nie kontrolerów, ale w niczym to nie przeszkodziło.
Brak komentarzy:
Prześlij komentarz