ホームページ>開発ツール>Big Surのツールバーについて
Big Surのツールバーについて 注:本ページは随時更新します。トップページの最終更新日や更新履歴には反映されませんのでご注意下さい。(更新日:2021.05.11)
追記3(注:1,2はページ末尾)
Xojo 2021 r1以降では、一体型で表示されることを確認しました。(詳細については、こちらを参照して下さい。)
Big Surではツールバーの仕様が変更され、タイトルバーとツールバーが統合(以下、一体型)されるようになりました。
Xcodeは、12からこの仕様変更に対応していて、例えばStoryBoard上にツールバーをドラッグすると、
Xojoでは手作業で対応することになりますが、いくつかのドキュメントを読む限り、関係するパラメーターは以下のようでした。
- Big Surでは、直ちに一体型で表示。
- Catalinaでは、従来型で表示。ただし、ビルドしたアプリをBig Surに持っていくと、何もしなくても一体型で表示。
Catalinaでビルドし、Catalinaで実行 Catalinaでビルドし、Big Surで実行
- ウィンドウ(NSWindow)
toolbarStyle(=3。注1)
styleMask(1 << 12 = NSWindowStyleMaskUnifiedTitleAndToolbar。ただし、公式ドキュメントではno effectとなっているが…)
subtitle(任意)
- ツールバーアイテム(NSToolbarItem)
bordered(true = Hover Effectを有効に)
- ツールバーアイテムとして指定するコントロール(NSControl)
controlSize(3 = NSControlSizeLarge)
注1)toolbarStyle:NSWindowToolbarStyleAutomatic = 0 , NSWindowToolbarStyleExpanded = 1 , NSWindowToolbarStylePreference = 2 , NSWindowToolbarStyleUnified = 3 , NSWindowToolbarStyleUnifiedCompact = 4ですが、これらをセットしても期待通りの動作をせず、従来型で表示されてしまいます。
という訳で、Xcodeでの動作を少し調べてみました。
ツールバーを付加した直後にブレークポイントを設定してみたところ、ツールバーには_toolbarViewという(privateな)サブビューがあり、その中に_windowTitleViewというサブビューがありました。_windowTitleViewはtoolbarStyle(上記注1参照)が1(=従来型)の時は0x0となり、それ以外では生成されて、その中の_toolbarStyleにtoolbarStyleの値が反映される?、という状況でした。
XojoでtoolbarStyle = 3をセットして、同様に調べたところ、_windowTitleViewが&h00000000になっていました。toolbar | +-- _toolbarView | +-- _windowTitleView(NSWindow.toolbarStyle = 1の時は0x0) | +-- _toolbarStyle(NSWindow.toolbarStyleを反映?)
つまり、ここが作られていない所為で一体型にならない?、のかもしれません。
なお、Xojoからはprivateメソッド/プロパティにもアクセスできるので、_toolbarStyleのセットを試みてみましたが、エラーになってしまいました。
(原因は不明ですが、セッターが用意されていない可能性も…)
いずれにしても、_windowTitleViewの実態がよく分からない(公開情報は皆無の上、Big Surからclass-dumpは使えなくなってしまった)ので、できることは限られてしまいます。
とは言え、Xcodeは何らかの仕込みをしている筈なので、そのメカニズムが利用できればいい訳ですが、こちらも公開情報が無く、難航しそうではあります。
とりあえずはこんなところです。
追記1
(1)ウィンドウとツールバーを生成(2)ツールバーをウィンドウにセット(3)ウィンドウを表示、する一連の処理をdylibとしてビルドしたものを、XojoとXcodeの両方から呼び出してみましたが、Xojoでは従来型、Xcodeでは統合型で表示されました。(つまり、これまでと同じ。)
dylib化した部分は共通なので、違いが出るのは何処なのか。参照するフレームワークか、リンクするライブラリか、…。
追記2
otool -Lで、Xcode, Xojoそれぞれでビルドした実行ファイルのFrameworkを調べてみましたが、
Xcode 12.3
Xojo 2020 r2.1/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 2022.20.117) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1770.255.0)
current versionが異なっていますが、この違いがどう影響するのかは不明です。参考サイト(5)を見ると、使える機能に差が出るのかも、…。/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1670.0.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1555.10.0)
(試しにバイナリエディターで、Xojoの方の上記Frameworkのcurrent versionを書き換えてみましたが、変化なし。)
さらに継続調査中…。
参考サイト(1):What’s New in macOS - macOS - Human Interface Guidelines - Apple Developer(Toolbars and Title Barsの項)
参考サイト(2):Michael Tsai - Blog - macOS Big Sur Changes for Developers
参考サイト(3):Mac – mackuba.eu(Toolbarsの項)
参考サイト(4):Big Sur - Declare Help - macOS - Xojo Forum
参考サイト(5):Dynamic Library Design Guidelines
[Home] [MacSoft] [Donation] [History] [Privacy Policy] [Affiliate Policy]