過去の開発日誌

2021年

8月19日

iOS 14 の iPad Air 2 で動画を再生すると、画面の回転方向を正確に取得することができず(0 (unknown)が返る)、さらに誤って回転方向に UIInterfaceOrientationLandscapeLeft を設定してしまうバグがあったため、以下のように修正しました。iOS 版 SDKを差し替えて更新しました。

--- onscripter_ios/DataDownloader-old/MoviePlayer.m  2018-12-10 20:53:40.000000000 +0900
+++ onscripter_ios/DataDownloader-new/MoviePlayer.m  2021-08-19 12:00:43.000000000 +0900
@@ -19,9 +19,10 @@
uiwindow.rootViewController = self;
[uiwindow makeKeyAndVisible];

-    if ([[UIDevice currentDevice] orientation] != UIInterfaceOrientationLandscapeLeft &&
-        [[UIDevice currentDevice] orientation] != UIInterfaceOrientationLandscapeRight)
-        [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeLeft) forKey:@"orientation"];
+    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
+    if (orientation != UIInterfaceOrientationLandscapeLeft &&
+        orientation != UIInterfaceOrientationLandscapeRight)
+        [[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeRight) forKey:@"orientation"];

player = [[AVPlayerViewController alloc] init];
player.showsPlaybackControls = false;

8月15日

ひさびさに Mac で ONScripter をビルドして動作確認をしました。まず、Mac を macOS Big Sur 11.5.1, Xcode 12.5.1 にアップデートし、iOS 版 SDKと最新のONScripterを使用してビルドしたところ、iPad Air 2(iOS 14.7.1)の実機および Xcode 12.5.1 のシミュレータ(iPhone 12 Pro Max - iOS 14.5)で特に問題なく動作しました。

しかし、USE_SELECTOR を有効にして起動時にゲームを選択できるようにしたところ、選択画面が表示されなくなっていました。また、これは数年前からあった不具合ですが、起動時にゲーム選択画面がランドスケープではなくポートレートで起動してしまう問題がありました。ScriptSelector.m を以下のように修正して、ScriptSelector.view のサイズを明示的に設定し、また ViewController を addSubview ではなく rootViewController に指定したところ、どちらの問題も解決しました。

--- onscripter_ios-old/DataDownloader/ScriptSelector.m     2019-09-11 11:08:23.000000000 +0900
+++ onscripter_ios-new/DataDownloader/ScriptSelector.m     2021-08-15 16:11:57.400545132 +0900
@@ -13,7 +13,8 @@
}

UIWindow *uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
-    [uiwindow addSubview:self.view];
+    [self.view setFrame:CGRectMake(0, 0, uiwindow.frame.size.width, uiwindow.frame.size.height)];
+    uiwindow.rootViewController = self;
[uiwindow makeKeyAndVisible];

is_running = YES;

また、これも数年前からあった不具合ですが、起動時にゲーム画面がランドスケープではなくポートレートで起動してしまう問題がありました。SDL の SDL_uikitopengles.m を以下のように修正して、ViewController を addSubview で設定しないようにしたところ、この問題も解決しました。

--- onscripter_ios-old/SDL/src/video/uikit/SDL_uikitopengles.m     2012-10-28 18:08:43.000000000 +0900
+++ onscripter_ios-new/SDL/src/video/uikit/SDL_uikitopengles.m     2021-08-15 16:15:49.617991796 +0900
@@ -132,7 +132,8 @@
[view->viewcontroller setView:view];
[view->viewcontroller retain];
}
-    [uiwindow addSubview: view];
+    // removed by Ogapee to enable screen orientation control (2021.8.15)
+    //[uiwindow addSubview: view];

// The view controller needs to be the root in order to control rotation on iOS 6.0
if (uiwindow.rootViewController == nil) {

また、IPHONEOS_DEPLOYMENT_TARGET を 8.0 から 9.0 に変更しました。これらの変更を反映させてiOS 版 SDK を更新しました。