Applicationにおいて、CoreAnimationを利用するサンプルProjectです。10.14.6ひととおり(このぐらい)CoreAnimationでGUI部品をアニメーションするテストを行なっていました。使いすぎるのは下品に見えるとの判断から、実際のアプリケーションでは最低限の地味な利用にとどめていました。2.0」においても、コマンド実行後にメニューを更新する際、更新したメニューを点滅表示するぐらいの「節度あるお付き合い」にとどめていました。それが、ここ最近組んでいるアプリケーションではド派手に利用する必要があるようで、再度こうした試作品を引っ張り出してテストしだしています。PDF)、各国語にローカライズしていたときに、最難関言語として名高いアラビア語(Arabic)を試してみたことがありました。APIを呼び出して指定言語に数秒で翻訳。記号類だけから構成されるフィールドは翻訳しないなど、その場でScriptを調整しながら大幅な翻訳作業の省力化を実現(ほかの方法もあるようなので、これがベストとは言いませんが、、、)。このScriptなしに他の言語への翻訳などというめんどくさい作業はやろうとは思いませんでした。この翻訳用AppleScriptの威力で30言語ぐらい翻訳。主要言語のうち、最後に残ったのが、文字が右から左に流れるアラビア語とヘブライ語でした。挙動がどのぐらい違うのか確認。Xcodeでローカライズ言語にアラビア語を追加。stringファイルの内容自体はオリジナルの英語のままの状態で、実行時のアプリケーションの言語環境に「アラビア語」を指定して起動してみました。スクロールバーが右側ではなく左側にツールバーアイコンはデフォルトの英語環境や日本語環境では、左→右の順で並びますが、アラビア語環境ではウィンドウ上部右→左と並びました。メニューの内容も右側にタイトルが来て、左側にキーボードショートカットが並ぶなど、予想外の配置です。これは、バグとかいった種類の話ではなく、はじめてアラビア語環境で自作のアプリケーションを起動して、その挙動の違いに驚かされたという話であります。2つのPDFViewを並べてあり、それぞれ右とか左とか言わなくてもわかるよう、左側には青色のラベル、右側には赤色のラベルを貼っておいたのですが、ツールバーアイコンの左右も入れ替わってしまい、自分の意図したとおりのレイアウトからはかけ離れたものとなってしまいました。アプリケーション内部で、アプリケーション起動環境から言語がアラビア語やヘブライ語のように右→左の表示を行う言語だった場合には何か処理を行なってツールバーボタンの入れ替えなどを行う必要があることでしょうか。ノーアイデアで分からないところ。APIをAppleScriptから呼び出して翻訳できたのですが、アラビア語とヘブライ語は難敵でした。攻略できていないので、そこんとこなかなか辛いです。Storeで絶賛レビュー中です。Connectionに電話して聞いてしまいましたが、わかったのは本当にまだレビュー作業中で、レビューにさらなる時間がかかるということだけです。Camera」の機能を利用して、iOSデバイス上で撮影した写真をその場でMacに転送・保存してみました。Zoechling氏のBlog上のものを利用させていただいております。Cameraを呼び出せるとよかったのですが、なかなかそこまで噛み砕いて解釈できなかったので、Xcode上のアプリそのままです。CameraのプロジェクトをXcode上でビルド&実行すると、なにもないっぽいWindowが表示されますが、下地にNSImageViewを敷いてあるような気がします。このウィンドウの真ん中の方でControl-クリックあるいはマウスの右ボタンをクリックすると、コンテクストメニューが表示され、そこでカメラから画像取り込みを行うデバイスを選択し、それらの周辺デバイスで撮影した写真をそのまま取り込めます。IDで関連づけたiOSデバイスのカメラを無線LANのネットワークごしにMacから利用するものと理解しています(Bluetoothもオンにする必要があるかもしれない)。Image」ボタンをクリックすると、その内容をデスクトップにPNG画像で保存します。cameraといったコマンドで取り込めてよいのではないでしょうか。コンテクストメニューの先にある機能に直接アクセスするためには、もう少し調べる必要がありそうではあります。10.13.xでは、動くことは動くんですがOS自体の未修正バグが多すぎて動作保証いたしかねます)。OSをアップデートすると機能が落ちるとは何事だろう?PDFViewのド派手なバグ(currentPageを取得できない)を回避するために、自前でAppleScriptでいろいろ回避コードを走らせているので、ページめくりのスピードが落ちています(個人的にこれのために作ったので、テンションが落ちるところです)。Storeでリジェクトされる危険性があります(より新しい代替APIであるMetalを使わないと因縁を付けられる気が、、、)。そこで、GPUImageに依存しているコードをすべて書き換え、GPUImageを完全に取り外しました。これには、よくよく調べたら、PDFの各ページをグレースケール画像に変換する箇所でしか利用していなかったことが大きいです。これで、名実ともに「すべてAppleScriptで記述したアプリケーション」に。GPUImageの除去は使い勝手には一切影響しません。若干の前向きな機能追加も行なっておきましょう。これまでに意見として寄せられていないものの、どうもグレースケール画像で比較を行うことに不満を持っていたユーザーが一定数いるものとにらんでいたので、カラーのまま比較する機能を追加しました。正直なところ、「カラー比較モード」は個人的には不要と思っている(文字主体の書籍の校正用に作った)のですが、念のためです。PDFはデータ上のささいな違いを「見逃す」ように作ってあります。AcrobatのPDF比較機能が、見た目には影響を及ぼさないデータ上の些細な違いばかりピックアップして実用性がまったくないことから思いついたものです。見た目に影響のない差異を見逃して、見た目や文字で差が発生している箇所を指摘するツールという味付けになっています。画像サイズを小さくした上でグレースケール化して比較するのはそのための重要な機能です。間違って色が変わったことを検出したいような用途もあることでしょう。Spaceの削除機能を追加しました。細かい箇所でまだ不具合点(右側のビューワーのノンブルが表示されないことがある)がありますが、とりあえず出してみてもよさそうな気配はしています。Mode対応させました。Credits.rtfのダークモード対応など、地味に工数が増えるのは勘弁してほしいです。あとは、外部アプリケーション操作要求を行うためのInfo.plistのエントリ追加などもあります。これを追加しないと外部アプリケーションへの操作要求のダイアログ自体が出ない=一切操作できないので要注意点です。AppleScriptアプリケーションのプロジェクトを作ると、デフォルトではソースコード開示状態のビルドセッティングになってしまうので、これも要チェック点でしょう。onlyになっていませんでした。NaganoyaPDFViewからcurrentPage()が取れないという、最低最悪レベルのバグが放置されたOSがリリースされ続けて2年。Supportに報告しても返事の1つもない今日このごろです。10.13のBetaでは存在しなかったのにRelease版で作られた画期的なバグを回避するために、いろいろ工夫をしてみました。Bridgeのみで発生しているらしきバグのようです。こんな基本的な箇所でバグを作って直さない連中の気が知れません。Listが落ちた状態で、報告しても1か月放置した事件など)、仕方なく回避策を検討してみました。ClassをObjective-Cで書いて使う(2)Objective-Cでユーティリティを書いて、パラメータとして与えたPDFViewからObjective-CでcurrentPageを取得する(3)今後もAppleがバグを作り続けることが予想されるため、サードパーティのPSPDFKitを導入するといった対策を検討していたのですが、最も手短なものとして、(4)表示中のページを自前で管理して、PDFViewに指定ページの内容を随時切り出して表示するという対処を行ってみました。PDFをオープンしてPDFViewで表示させ、左右の矢印キーでページをめくることができます。10.2上でビルドと確認を行いましたが、内容的にはXcodeのバージョンは関係ありません。NaganoyaXcode上で記述し、他のアプリケーションを操作するAppleScriptアプリケーションで、セキュリティダイアログに表示する内容(Info.plist内のエントリ)をローカライズする方法について紹介します。Mojaveではセキュリティ機能が強化され、アプリケーションから他のアプリケーションをAppleEventで操作しようとすると、ユーザーに認証を求めます。この動作は、同一アプリケーションでは初回時のみ行われます。アプリケーションのバージョン・アップ時に再度問い合わされることはありません。Signしてあるアプリケーションであれば初回起動時の初回AppleEvents発行時のみ行われます。Signしない場合については言及しません。項目でチェックを入れれば認証したのと同じことになります。この項目、1年使い続けると項目数がヤバいぐらい増加しそうですが、そのあたりの膨大な数になったときの使い勝手が一切考えられていないバカっぷりが素敵です(項目のしぼりこみぐらいできないとまずい)そして、ただ漫然とXcode上でAppleScriptアプリケーションのプロジェクトを作成し、AppleScriptアプリケーションを記述しても、実行時にセキュリティダイアログは表示されないという話を昨日書きました。Description」(NSAppleEventsUsageDescription)のエントリを作成する必要がある(2)AppleScriptアプリケーション内にて、セキュリティダイアログの認証が必要な動作(新規ドキュメントを作成するなど)を、アプリケーション起動中あるいは起動直後のタイミングで行い、セキュリティダイアログでユーザーの認証を得ておく(ことが望ましい)という状態です。セキュリティダイアログのメッセージをローカライズする昨日の段階では、このセキュリティダイアログに表示させる内容がローカライズできないと思っていました。その後、冗談半分で「Info.plistの内容のローカライズ方法」などと検索エンジンで調べてみたら......さがしてみるもので、すぐに方法が見つかりました。"value";のように記述しておき、InfoPlist.stringsファイルをXcode上でローカライズするのだとか。Description」のエントリを作ってある状態から話をすすめます。このままでは、このエントリのキー名称がよくわからないので、Info.plistをテキスト形式でオープンし直します。すると、このエントリのキー名称が「NSAppleEventsUsageDescription」だということがわかります。そこで、Xcodeのプロジェクトに「空のファイル」としてInfoPlist.stringsファイルを追加し、ローカライズします。ここでは、デフォルトで用意されるEnglishのほかにJapaneseを追加しました。この状態でXcode上でビルド+実行(Command-R)を行うと、のように、日本語環境にあわせてローカライズしておいたメッセージが表示されることが確認できました。10.14+Xcode最新版の10.1だと実際どうなのかをまとめてみました。Xcode上でこれまでと同様にScriptアプリケーションを記述しただけではダメSandbox対応させると制約事項が増えるため、Sandbox非対応のアプリケーションをビルドしてどこまで行けるかは興味深いところです。Sign+Sandboxの設定を行ってXcode上でAppleScriptアプリケーションを作成。Keynoteに新規ドキュメントを作成させる程度のお気軽なコードを書き、ビルドして実行。-1743)などとエラーが出るだけで、Automationのセキュリティダイアログは表示されませんでした。▲セキュリティダイアログはこんなやつInfo.plistにエントリを追加するとSecurityダイアログが表示されるようになるこういう場合には海外のサイトを調べてみるのが一番手っ取り早いところです。Descriptionというエントリを追加する必要があるとのこと。このエントリ、例のMojaveから出るようになったSecurityダイアログにアプリケーション側から出力するカスタムメッセージを定義するエントリのようです。エントリさえ存在すれば、とくに何か気の利いたメッセージを入れる必要はないようです。英語で書いても、日本語で書いてもそのままダイアログに出力されます。Info.plistの内容自体はローカライズできないので、本エントリの内容は広域に配布するものであれば英語で、特定の日本国内の顧客に向けて納品するものであれば日本語で書けばいいんじゃないでしょうか(一般的なメッセージ同様にローカライズできることが望ましい)。このあたり、ローカライズできないのは仕様的におかしいので、そのうち仕様が変わりそうです、、、、Securityダイアログを表示させるためには、AppleScriptアプリケーション側から対象のアプリケーションに対して命令を発行する必要があるのですが、これが、activateさせるとかバージョン番号を調べるぐらいのコマンドではそのまま実行されてしまって、セキュリティダイアログは表示されません。saving)するぐらいのことを行わないと、ダメなようです。このあたり、実際に試してみるしかないようです。対象アプリケーションに対してコマンドを実行し、Securityダイアログが表示され、ユーザーによってきちんと認証されれば、tccKitを用いて認証状況を確認して、すべてのアプリケーションの認証完了状態をAppleScriptから知ることができます。AppleScriptアプリケーションの冒頭(applicationWillFinishLaunchingイベントハンドラなど)でtccKitによって認証状態をチェックし、未認証の状態であれば操作対象のアプリケーションに対して試験的にコマンドを実行するようにすればよいでしょう。Signされていれば、セキュリティ認証ダイアログでユーザー認証する必要があるのは初回のみです。Accountが必須となっているため、この点は必然的にクリアされることになります。この認証フローにおいてアプリケーション自体がSandbox化されている必要はありません(確認ずみ)。mark」の機能をAppleScriptで利用する方法についてまとめておきます。markはXcode上のテキストエディタで現在編集中のソーステキスト内の移動を行いやすくするもので、基本的には「ただのコメント文」です。markによって表示させます。長くなるメニューを見やすくする、という役割があります。markはプログラムの実行には何も影響しません。mark」形式のコメントがあると、Xcodeがそれを読み取って、ポップアップ・メニュー上に指定内容を表示します。markを表示しなくなることは日常茶飯事であることを明記しておきます。MARKのコメント行の先頭にTABを入れないとまともに表示される模様。