dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

9VAeきゅうべえ Mac 64bit版 開発メモ

9VAe Mac版の Mojave 対応版をリリースしたが、Sierra より動作が遅い。32bit版アプリの動作が制限されているようだ。仕方がないので、64bit版への移植を開始。

Objective-C で移植します。Cプログラムの移植には、Swiftよりはるかに使いやすいです。

 

macOSの種類と機種対応表はこちら(Macのアンチョコ)

 

いろいろ試行錯誤を繰り返しなんとか動くようになったので、こちらで公開(9va-mac64)しました。

以下は、macOS 10.15 Catalina ベータ版での画面です。左上のフォルダが従来の9VAeで、32bit アプリなのでストップマークがついて実行できません。2つめのフォルダが今回移植した64bit版9VAeです。ストアアプリでないので最初に警告がでますが、マウス右ボタンメニュー>「開く」をもう一度実行すると、ちゃんと動作しました。

 

f:id:dnjiro:20190828191236p:plain



 

 

 

64bit版移植の方針

  • Objective-C を使う。9VAe iOS版が Objective-C で書かれているので、それを利用して移植する。
  • Objective-C のサンプルコードは、ネットから入手できなくなっている。そこで、古いMacOSのDVDにはいっている Xcode サンプル Sketch を使う。
  • これを最新の Xcode で読み込むと新しいプロジェクトにコンバートしてくれる。
  • イベント処理を残し、iOS版の9VAeのプログラムを追加し、Sketchの処理ルーチンを取り除く。
  • iOSmacOSで関数が異なる部分を修正する。iOSのUI関数が、macOSでは使えない。また、mouseの処理、メニュー処理が iOSにないので追加する。

 

プロジェクトの修正

  • Sketch プロジェクトの名前を QVAe に修正。
  • MacOS Development Target を 10.10 にする
  • Build Settings > Search Paths > Always Search User Paths(Deprecated) をNoにする

プロジェクトターゲットの修正

  • General > App Icons  (1)「Migrate」ボタンクリック(1回しか押してはいけない) (2) 左側のリスト > Resources > Images.xcassets > AppIcon (3) 右側に128x128 png アイコンをドラッグして追加 

リソースの修正

  • 古いアイコン Draw2App.icns を削除
  • Draw2.nib > Localization > (1) English にチェック (2) English,deprecatedのチェックをはずす (3) Builds for を Deployment Target(10.7) 
  • Sketchを検索して9VAeに変更。(1) メニュー (2) infoplist.strings
  •  

ターゲットにリソースを追加

  • ターゲット>Copy Bundle Resources > + をクリックしてファイルを追加

ターゲットにFramework 追加

  • Cocoa
  • CoreGraphics
  • CoreFoundation
  • CoreImage
  • CoreMedia
  • CoreText
  • CoreVideo
  • AVKit
  • AVFoundation
  •  

SKTGraphicView を Window全体に一致させる

SKTGraphicView を 9VAeの描画ウィンドウにする。9VAeは Viewを1つしかもっていない。

  • DrawWindow.nib のView の直下に SKTGraphicViewを移動
  • Use Auto Layoutにチェック
  • 上下左右値0の Constraints を追加 

 

SKTGraphicView に Timerを追加

SKTGraphicView に mousemoved イベントを受けるよう設定

  • 何もしないと mousemoved イベントが無視されるため、ホバー処理ができない。以下のコードを、初期化処理にいれる。

CGRect rect = CGRectMake(0.0f, 0.0f, self.frame.size.width, self.frame.size.height);

NSTrackingAreaOptions options = NSTrackingActiveInKeyWindow | NSTrackingMouseMoved | NSTrackingInVisibleRect;

NSTrackingArea *_trackingArea = [[NSTrackingArea alloc] initWithRect:rect options:options owner:self userInfo:nil];

[self addTrackingArea:_trackingArea];

objective c - NSView mouseMoved event sometimes doesn't fire - Stack Overflow

以下の関数を追加

- (void)mouseMoved:(NSEvent *)event

- (void)mouseUp:(NSEvent *)event

- (void)mouseDragged:(NSEvent *)event

- (void)rightMouseDown:(NSEvent *)event

- (void)rightMouseDragged:(NSEvent *)event

- (void)rightMouseUp:(NSEvent *)event

 

drawRect の処理 

  • Windowサイズが変更されたら画面バッファを作り直す
  • SKTGraphicViewのcontextに対応したイメージを作成。描画はそこに行う
  • drawRect では描画したイメージから毎回矩形転送する

 タブの削除

  • WindowController ウィンドウ生成時に以下をいれる

[NSWindow setAllowsAutomaticWindowTabbing: NO];

 

キー

ファイル開く

ファイル保存

メニュー

  • メニューの表示項目変更、メニュー実行は以下のコードを SKTGraphicView.m に入れる。(NSInteger)[item tag] でメニュー項目に設定した tag 値を取得できる。それを9VAeLib にわたしてメニューの状態を得る。

- (BOOL)validateMenuItem:(NSMenuItem *)item {

  int ret = [qvae qVAtestCommand:(int)[item tag]]; //tag はメニュー項目数値

  [item setState:(ret&2 ? NSOnState : NSOffState)]; //チェックの切り替え

  return ret&1 ? NO:YES; //灰色にするかどうかの切り替え

}

  •  メニュー項目の実行は以下のコード。メニューの tag に 9VAeLib の処理番号をいれておく
  • Draw2.nib のメニュー項目>Outlets > Sent Action の(+)をドラッグして、FirstResponderのなかの qvaeCommand とつなぐ。

- (IBAction)qvaeCommand:(NSMenuItem *)menuItem{

  [qvae qVAsendCommand:(int)[menuItem tag]]; //tag はメニュー項目数値

}

文字入力

フォント

アニメGIF出力

QuickTime出力

音再生

多国語対応

9View

バッチ処理

deprecated 対応

 

 いろいろ試行錯誤を繰り返し、メインルーチンを何度も書き直した結果、なんとか動くようになった。こちらで公開(9va-mac64)

 

 

 Mojaveでdmgを作成すると、10.10でマウントできなくなった

  • 新しいOSに対応せねばなるまいと、Mojave + Xcode11で開発していた。
  • 新しいOSで動作しない問題点があったので、新OSへの対応ばかりやっていたら、ダウンロードモジュール dmg が、古いOSでマウントできなくなっているようだ!なんということだ。Appleの下位機種切り捨てにやられた。
  • 古い機種に対応するためには、古いOSで作らないといかん。
  • そうすると、今度は、Mojave でビュアが起動しなくなった。dmg のバージョンによってファイル名がかわるのか、アプリの性質がかわるのか??

 

Sandboxアプリの作り方

 

NSURLConnection から NSURLSession への移行

Deprecated対応

 

Downloadファイルを開く方法

info.plist内に以下を追加し値をYESにするとファイルアプリでコピーできるようになるようだ

 

Apple Silicon (Universal2)への対応

  • Xcode 12.2 にすると、勝手にUniversal2 にしてくれるらしい。しかし、うかつにアップすると、プロジェクトがつくれなくなったりするので、慎重にやらんといかん。今の環境をおいておいて、古いMacに BigSur をいれて、試してみてからにすべき。移植のしかたのドキュメントは以下
  • Apple Developer Documentation

Xcode 15にすると、'libarclite'が見つからないエラー

  • Xcode 15にすると、Debugモードだとエラーが出ないが、Releaseモードにすると'libarclite'が見つからないというエラーがでるようになった。
  • 対応バージョンを、macOS12(Monterey) 以上にするとエラーがなくなる。どうも旧バージョン(Intel)用のARC (Automatic Reference Counting)用のライブラリが削られているためらしい。Xcode14でないと、Intel用アプリがつくれないかも