Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

Kamenoko、Mac App Storeで販売開始

Posted on 5月 3, 2020 by Takaaki Naganoya

Mac App Storeでリジェクトをくらうこと3回。ようやくKamenokoがMac App Storeで販売開始になりました。本アプリケーションは、Piyomaru SoftwareがAppleScriptで開発し、Mac App Storeで販売したアプリケーションの2作品目になります。

# Mac App Storeからちゃんと買えることを確認しました。こういうの、1つ1つ確認しないと怖いです

1つやらかしたのは、検索キーワードにアプリケーション名を入れておかなかったので、アプリケーション名で検索できないという「お可愛らしい」ミス。

些細な機能のアップデートをリリースしてキーワードを追加しておくほかなさそうです。

# v1.1のリリース時にいろいろ宣伝を(人力で)行うことにします。このv1.1で安定性と速度が大幅に向上し(このあたりはプログラム以外の要素による)、簡易Undoや入力ダイアログの文字化け抑止など、完成度が大幅に増しています。Mac Pro 2019で計算間違いが起こる現象についても対処を行なっています(実機がないので検証は行えないんですけれども)

最初のバージョンなので、メニューなどは日本語ローカライズしていません。

また、中身がほぼ99.9%AppleScriptで書いてあるものの、

Scriptableではありません。このアプリケーションの特性からいって、アプリケーションの書類を操作(読み書き)できるAppleScriptライブラリをアプリケーションバンドル内に入れることで、アプリケーション自体をScriptableにしなくても書類を操作できてよいのではないかと考えています。

主要機能をコンテクストメニューから呼び出すので、ワンボタンマウスを使うと手も足も出ません。その点のみ要注意です。

本アプリケーションで苦労した点

もともと、この6角形の図形を使ってKeynote上でいろいろアイデアを練ったり説明のための図を作っていろいろ試してみたら「この図を作るアプリケーションは便利だし、自分でも作れそうだ」と思いついたのがきっかけです。


▲LGやPanasonicが出している透明有機ELディスプレイに表示させるとこんな感じに?(想像図)

ハリウッド映画に出てくるハリウッド的な未来風のインタフェースを実際に実装してみるとこんな感じになるだろうか、というコンセプトでデザインしています。


▲Panasonic様のショールームを訪問して、実機で表示してみたところ

透明ディスプレイでは、明暗差を大きく確保しないとオブジェクトの視認性が下がるとか、グラデーション表現を行うと視認性が下がるといった「仮説」を立て、なるべく一色でベタ塗りするように味付けしています。このあたりは、透明ディスプレイに合わせたチューニングです。グリーンバック表示機能も、どの程度使えるか不明ですが、黒色バック透過モードで使い勝手がよくなかった場合への備えでもあります(一説には、黒色バック透過が一番きれいに透過するもよう)。

濃い色を積極的に使っているのも、透明ディスプレイの透過モード時には全体的に白っぽく表示される傾向があるようなので、「白飛び」を避けることが目的です。

1月中旬ぐらいに作り始め、1月末には初期バージョンが動いていました。


▲初期バージョン


▲セルのダブルクリックで文字入力が可能に(2月中旬)


▲指定セル内キーワードのタクソノミー展開を実装(2月中旬)


▲ビューの拡大・縮小表示、コンテクストメニュー表示が可能に(2月末)


▲ブロック認識、ブロック削除が可能に(3月中旬)


▲AirDrop共有、データ埋め込みPNG書き出し(3月中旬)


▲テーマセレクタが完成(3月下旬)


▲大型文字入力ダイアログを追加(4月)

正直なところ、こんなストロングスタイルのGUIアプリケーションを作ろうと思ったことはなかったので、いろいろと未知の現象に直面しました。

一番真っ青になったのは、開発途上でド派手なメモリリークに直面したときです。たいていのAppleScriptアプリケーションは、まとまった処理を行うためのパラメータ選択をGUI画面上で行い、メイン処理が動いたらまとまった処理を行って終了という動き方をするものでした。つまり、GUIアプリケーションといいつつもメモリリークに苦しめられることが少なかったのです。

こんな風にユーザーと対話動作をたえず行い、結果をグラフィックとして画面に描画する(=メモリリークの危険性の高い)アプリケーションを作るのははじめてです。

まずは、些細な処理でWindow Serverのメモリを大量に消費してクラッシュするという現象に直面。開発初期にこの現象の対策が行えたことはラッキーでした(Edama2さんにはこの段階でいろいろ助言をいただきました)。

次に、プレビュー作成時にメモリリークを行う現象に直面。いくぶん緩和していますが、ここは解決できていません。クラッシュしても、作業中の内容を定期的に保存し、強制終了後の再起動時にデータをリカバリする機能を追加。クラッシュしにくくする方向の努力はしつつも、クラッシュしてもデータを失いにくい方向に機能強化しました。

環境設定まわりの機能はけっこう実装に苦労しています。実装が間に合わなかったので、仕様的には幾分日和りました。

そして、毎度毎度のことながらSandbox化には苦しみました。コード署名するのに、Mac App Installerの署名とMac App IDの署名があり、間違ってMac App Installerで署名したり。あとは、コマンドラインから起動するタイプのツールをアプリケーションバンドル内に同梱して呼び出していたのですが(display mirror)、コードサインで問題が出たので分離せずにアプリケーション内に組み込むように変更しました(リジェクトされている間に機能改変)。

本アプリケーションでプログラム的に一番苦労したのは、ブロック認識プログラムです。データ上の1つの塊をまとめて処理するのに、この独特のヘックス構造のコマのせいで、前例がないような独創的な処理をいろいろと書かなくてはなりませんでした。

作りたかったけどv1.0にはあきらめた機能 ほか

アルファテスターからの指摘もありましたが、Undoがないのはけっこう辛いです。結局、Undoの実装のためには内部データを改変のたびに時系列順に保存し、保存した最新-1の状態に戻すといった実装になると思います。この、無段階Undoを実装することは可能と思われましたが、割と大掛かりな機能になりそうな(1か月ぐらいかかりそう)気配がしたので初版では見送りました。

本アプリケーションはScriptableではありません。将来的には、書類の読み取りと変更を行う機能を持つScript Libraryを同梱する方向でAppleScript対応を考えています(たぶん、これが一番楽で実用的)。

キャンバスの回転機能は単体で動くものが出来上がっていますが、まだアプリケーションに組み込んで動作させるところまでは行っていません。

「2つのキーワードの共通要素をリストアップする」プログラムはこのKamenokoの部品用に作ったもので、単体ではそれなりに有用な部品ではあるものの、本アプリケーションにどのように組み込むかのいいアイデアが出ませんでした。データとして処理すると有用さがわかるものの、それをどのように可視化するかが課題です(多すぎるアイデアにつぶされない戦い)。

本アプリケーションには検索機能が実装されていません。検索系の部品として、類義語展開したうえで検索を行う「スタークエリー」という部品をAppleScriptで作ってあるので、組み込むとしたらこれだと(指定のキーワードだけでなく、類義語でもヒットする)思っているのですが、英語+日本語の類義語(シソーラス)辞書が200MBぐらいあるのとGUI的にどうやってヒット状況を表示するかのアイデアがなかったので実装を見送りました。あとから考えると200MBぐらい昨今のアプリケーションでは問題ではないレベルなので、悩む必要はなかったようです。

開発中はフォントメニューのキャッシュ機能を有効にしていましたが、リリース版ではこれをオフにしました。Kamenokoを起動していない間にフォントの変更(追加、削除)が行われたことを検出する方法が思いつかなかったので、フォントメニューのキャッシュが危険に思われたためです。フォントパネルを表示させてフォントを指定する方法も試してみたものの、あまりピンとこなかったので使いませんでした。

目下、メインScriptが3,000行を超えるぐらいのサイズで、全体では5,000行ぐらいは行っていると思います。メンテナンス性があまりよくないので、機能追加を行うためにはメイン部分のスリム化が必須な状況でしょう。

More from my site

  • Kamenoko v1.1をMac App Storeで公開Kamenoko v1.1をMac App Storeで公開
  • Kamenoko v1.1のMac Pro 2019バグ対策機能が効果を発揮Kamenoko v1.1のMac Pro 2019バグ対策機能が効果を発揮
  • 新型アプリケーション「Kamenoko」をMac App Storeレビューに提出新型アプリケーション「Kamenoko」をMac App Storeレビューに提出
  • 2020/2/8のTMUG例会で「Kamenoko」のデモをします2020/2/8のTMUG例会で「Kamenoko」のデモをします
  • 2D Listの各要素を逆順に2D Listの各要素を逆順に
  • Mac Pro 2019でアプリケーションの計算結果にズレ?!Mac Pro 2019でアプリケーションの計算結果にズレ?!
(Visited 196 times, 2 visits today)
Posted in PRODUCTS | Tagged 10.13savvy 10.14savvy 10.15savvy Kamenoko | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 13, Ventura(継続更新)
  • アラートダイアログ上にWebViewで3Dコンテンツを表示(WebGL+three.js)v3
  • UI Browserがgithub上でソース公開され、オープンソースに
  • Xcode 14.2でAppleScript App Templateを復活させる
  • macOS 13 TTS Voice環境に変更
  • 2022年に書いた価値あるAppleScript
  • ChatGPTで文章のベクトル化(Embedding)
  • 新発売:AppleScriptからSiriを呼び出そう!
  • iWork 12.2がリリースされた
  • 従来と異なるmacOS 13の性格?
  • 新発売:CotEditor Scripting Book with AppleScript
  • macOS 13対応アップデート:AppleScript実践的テクニック集(1)GUI Scripting
  • AS関連データの取り扱いを容易にする(はずの)privateDataTypeLib
  • macOS 12.5.1、11.6.8でFinderのselectionでスクリーンショット画像をopenできない問題
  • macOS 13でNSNotFoundバグふたたび
  • ChatGPTでchatに対する応答文を取得
  • 新発売:iWork Scripting Book with AppleScript
  • Finderの隠し命令openVirtualLocationが発見される
  • macOS 13.1アップデートでスクリプトエディタの挙動がようやくまともに
  • あのコン過去ログビューワー(暫定版)

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1390) 10.14savvy (586) 10.15savvy (434) 11.0savvy (277) 12.0savvy (185) 13.0savvy (55) CotEditor (60) Finder (47) iTunes (19) Keynote (98) NSAlert (60) NSArray (51) NSBezierPath (18) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (51) NSDictionary (27) NSFileManager (23) NSFont (18) NSImage (41) NSJSONSerialization (21) NSMutableArray (62) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (117) NSURL (97) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (56) Pages (37) Safari (41) Script Editor (20) WKUserContentController (21) WKUserScript (20) WKUserScriptInjectionTimeAtDocumentEnd (18) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC