問題タブ [document-based]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - QuickTime Player のようなドキュメントベースのアプリケーションに中間ファイル タイプを実装する方法は?
ユーザーがアプリ経由で保存できないドキュメント ファイル タイプを作成できる、macOS 上のドキュメント ベースのアプリケーションを使用した経験のある人はいますか? 名前と場所のフィールドが無効になっている名前変更/移動ドロップダウンがありますか?
以下のシナリオの説明に入る前に、質問から始めたいと思います。
ドキュメント ベースのアプリケーションに中間ファイル タイプを実装しようとしています。メディアの編集/結合を記述する一種の中間プロジェクト ファイルのようなものと考えてください。ただし、ユーザーがウィンドウを閉じようとすると、メディアを最終形式 (中間タイプではない) にエクスポートするように求められます。
私は、QuickTime Player がどのように機能するかを体験のベースにしようとしています。QuickTime Player でビデオを開くと、ビューアのように機能し、タイトルをクリックしてドロップダウンからファイルの名前を変更/移動できます。
https://i.stack.imgur.com/a5WGr.png [QuickTime Player の名前変更/移動ドロップダウンを示すスクリーンショット]
注: 興味深いことに、何らかの理由で [ロック] オプションが無効になっています。私のファイルを開くときはそうではありません。
ここで、QuickTime で別のビデオをそのビデオにドラッグすると、2 つのコンポジションが作成され、ウィンドウは編集済みとしてマークされた無題のドキュメントに変わります。これは、拡張子 qtpxcomposition で作成された新しいドキュメント ファイル タイプを介して行われているようです。QuickTime Player App の plist を見ると、com.apple.quicktimeplayerx-composition と com.apple.quicktimeplayerx-composition-bundle という識別子の下に、同じ拡張子を共有する 2 種類の QuickTime Player コンポジションがあることがわかります。また、QuickTime Player アプリがこれらのタイプのエディターとして設定されていることも示しています。私はこれを理解し、別の拡張機能を使用して同じ方法で独自のエクスポート UTI を実装しました。そのタイプの一時ファイルを作成し、その内容でドキュメントを開き、現在のウィンドウを置き換えるという動作も動作しました。ただし、私が見つけた大きな違いは、名前の変更/移動ドロップダウンが完全に有効になっていることです。つまり、ユーザーは中間ファイルを保存できます。QuickTime Player では、そうではないことがわかります。
https://i.stack.imgur.com/yrCab.png [QuickTime Player の qtpxcomposition ファイルの名前変更/移動ドロップダウンを示すスクリーンショット]
name、where、および locked オプションはすべて無効になっています。ユーザーはタグにのみ追加できるため、この名前変更/移動ドロップダウンを開くと、タグ ドロップダウンが自動的に開きます。これがどのように行われるかを理解できませんでした。ファイルの内容からロードされた無題のドキュメントであるため、タイトルを右クリックしてもパスがありません (私の場合も同じです)。これらのオプションが無効になっているため、名前を変更/移動することはできません。 . ファイルメニューの下にある「保存」、「名前の変更」、および「移動先」オプションはすべて無効になっています。ウィンドウを閉じると、ここに示すようにコンポジションを .mov ファイルとしてエクスポートする保存ダイアログボックスが表示されます。 : https://i.stack.imgur.com/bf5w9.png. これは、ユーザーがこの中間ファイルを保存する実際の方法をアプリが効果的に隠していることを意味します。彼らがこれをどのように行ったか知っている人はいますか?
私のテストでは、ドロップダウンは YES を返したときにのみ存在するようです+ (BOOL)autosavesInPlace
。これが、無題のドキュメントのウィンドウを閉じようとしたときに保存プロンプトが表示される原因でもあります。ただし、QuickTime Player が自動保存の保存先を特定の場所に設定していることは知っています。つまり、/Users/.../Library/Containers/com.apple.QuickTimePlayerX/Data/Library/Autosave Information 内にあります。そのような場所に自動保存を適切に設定する方法をまだ理解する必要がありますが (私の推測では 経由ですNSURL * autosavedContentsFileURL
)、これが名前と場所のフィールドが無効になっている理由と関係があるとは思えません。
私が試したことには、 からエラーを返すこと、checkAutosavingSafetyAndReturnError
or から YES または NO を返すものをテスト preservesVersions
するautosavesDrafts
こと、およびドキュメントをロックするという考えをテストすることが含まれます。ただし、これらのどれも機能しませんでした。これらのほとんどの 1 つは、ファイルが「ロック済み」としてマークされているように見えるようにすることでしたが、ユーザーはその名前変更/移動ドロップダウンを開いてロックを解除できました。ファイルがQuickTime Playerでロックされているとマークされていないことを考えると、そのようにロックすることもその一部ではないと思います。
私が考えることができる他のアプローチは、彼らがドロップダウン自体にアクセスしてそれらのテキストフィールドを無効にすることでしたが、そのドロップダウンにアクセスする方法が見つかりませんでした. 私にそれを与えるデリゲートメソッドまたはオーバーライド可能なメソッドが見つかりませんでした。私が見つけた最も近いものは、オーバーライドできる NSWindow でしたが、- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu
それはタイトルを右クリックしたときに表示されるパスポップアップを参照するだけです。このような無題のドキュメントでは、すでに何もしていません。
この時点で他に何を試すことができるかわかりませんし、この種のことについてオンラインで尋ねている人を見つけることができませんでした. そのドロップダウンを無効にするために誰かが与えた唯一の答えは、そのボタンが作成されたときにnilを返していましたが、それは機能しません。タイトルの右側にあるシェブロンがなくなっていますが、タイトルをクリックしても機能が停止することはありません。
これが QuickTime Player でどのように行われているのか、誰にもわかりませんか?
swiftui - SwiftUI Document Based App のアプリ起動シーケンスで何が起こっているのですか?: ファイル ピッカー ダイアログが自動的に表示されます
Xcode 11 と SwiftUI を使用してテスト ドキュメント ベースのアプリを作成しています。
最初は、ファイル ピッカー ダイアログを追加し、アプリにメニュー/ボタンを開く必要があると考えていました。しかし、そうである必要はありません。アプリの起動時に、ファイル ピッカー ダイアログが自動的に表示されました。しかし、Main App、ドキュメント構造体、および ContentView にはコードがありません。何もない。
アプリの起動シーケンスで何が起こっていますか? SwiftUI または Cocoa Framework はこのシーケンスを処理しますか? ヘルプ ドキュメントがあれば教えてください。