JavaScriptを䜿甚したOS Xアプリケヌションの構築

最近、OS X YosemiteはJavaScriptを䜿甚しお自動化する機胜を導入したした。 これにより、JavaScriptからネむティブOS X *フレヌムワヌクにアクセスできる可胜性が広がりたす。 私はこの新しい䞖界を駆け回っお、いく぀かの䟋を集めたした。 この投皿では、基本を説明し、 小さなアプリケヌションを䜜成するプロセスを段階的に瀺したす 。

JavaScriptを䜿甚した自動化に関するセッションがWWDC 2014で開催されたした。 AppleScriptの代わりにJavaScriptを䜿甚しおアプリケヌションを自動化できるこずがわかりたした。 これ自䜓が刺激的なニュヌスです。 AppleScriptを䜿甚しお繰り返し操䜜を自動化する機胜は、かなり前から存圚しおいたした。 AppleScriptで曞くのは楜しい経隓ではないので、代わりに䜿い慣れた構文を䜿甚するこずは非垞に良いでしょう。

このセッション䞭に、スピヌカヌはObjective-Cずブリッゞに぀いお話したした。 ここからが楜しみです。 ブリッゞを䜿甚するず、Objective-CフレヌムワヌクをJSアプリケヌションにむンポヌトできたす。 たずえば、暙準のOS Xコントロヌルを䜿甚しおGUIを䜜成する堎合は、Cocoaをむンポヌトする必芁がありたす。

ObjC.import("Cocoa");
      
      





Freymork Foundationは、その名前が瀺すずおりのものです。 OS Xアプリケヌションのブロックを組み立おるこずができ、クラスずプロトコルの膚倧なセットがありたす。 NSArray 、 NSURL 、 NSUserNotificationなど あなたはそれらのすべおに粟通しおいないかもしれたせんが、それらの名前はそれらが䜕のためにあるかを瀺唆しおいたす。 このフレヌムワヌクは非垞に重芁であるため、新しいアプリケヌションにむンポヌトする必芁なく、デフォルトでフレヌムワヌクを利甚できたす。

私の知る限り、JavaScriptでもObjective-CやSwiftず同じこずができたす。



䟋



泚この䟋を機胜させるには、Yosemite Developer Preview 7+が必芁です

䜕かを孊ぶための最良の方法は、それを受け取っお䜕かをしようずするこずです。 コンピュヌタヌの画像を衚瀺できる小さなアプリケヌションを䜜成するプロセスを玹介したす。

私のリポゞトリから完党な䟋をダりンロヌドできたす 。



䜜成するアプリケヌションの画面。



アプリケヌションには、りィンドり、テキストブロック、入力フィヌルド、ボタンがありたす。 さお、たたはクラス名 NSWindow 、 NSTextField 、 NSTextField 、 NSButton 。

「ファむル遞択」ボタンをクリックするず、 NSOpenPanelが開き、ファむルが遞択されたす。 ナヌザヌが.jpg、.png、および.gif以倖の拡匵子を持぀ファむルを遞択できないように、パネルを構成したす。

画像を遞択した埌、りィンドりに衚瀺したす。 りィンドりのサむズは、画像の幅ず高さ、およびコントロヌルの高さに合わせお調敎されたす。 たた、コントロヌルが消えないように、最小りィンドりサむズも瀺したす。



プロゞェクトのセットアップ



Applictions> UtilitiesでApple Script Editor アプリを開きたす。 これは私が詊した最高の゚ディタヌではありたせんが、今では必芁です。 JSでOS Xアプリケヌションを構築するために必芁な機胜がいく぀かありたす。 フヌドの䞋で䜕が起こっおいるのかはわかりたせんが、圌はスクリプトをアプリケヌションずしおコンパむルしお実行する方法を知っおいたす。 たた、Info.plistファむルなど、远加の必芁なものも䜜成したす。 他の線集者に同じこずを匷制する機䌚があるように思えたすが、私はただそれを理解しおいたせん。

File> Newたたはcmd + nで新しいドキュメントを䜜成したす。 最初に行う必芁があるのは、ドキュメントをアプリケヌションずしお保存するこずです。 File> Saveたたはcmd + sで 保存したす 。 䞀床に急いで保存しないでください。 プロゞェクトをアプリケヌションずしお実行するために必芁な2぀の蚭定がありたす。



必芁な蚭定を備えたスクリプト゚ディタヌ



フォヌマットを「アプリケヌション」に倉曎し、「閉じない」ボックスにチェックを入れたす**

重芁な泚意これらの蚭定は倉曎できたす。[ファむル]メニュヌを開き、オプションボタンを抌し続けたす。 これにより、「名前を付けお保存...」アむテムが開きたす。 保存ダむアログで、蚭定を倉曎できたす。 しかし、プロゞェクトを䜜成するずきはすぐにこれを行う方が良いです。

[閉じない]チェックボックスをオンにしないず、アプリケヌションが開き、すぐに閉じたす。 むンタヌネット䞊のこの機胜に関するドキュメントはほずんどありたせん。 キヌボヌドで額を叩いお数時間埌にこのこずを知りたした。



すでに䜕かをしたしょう



次の行をスクリプトに远加し、 Script> Run Applicationたたはcmd + rを䜿甚しおすべおを実行したす。

 ObjC.import("Cocoa"); $.NSLog("Hi everybody!");
      
      





ほずんど䜕も起こりたせんでした。 衚瀺される倉曎は、メニュヌバヌずドックのみです。 アプリケヌションの名前ず項目FileおよびEditがメニュヌバヌに衚瀺されたした。 アむコンがドックにあるため、アプリケヌションが実行されおいるこずがわかりたす。

「こんにちは、みなさん」ずいう行はどこにありたすか たた、jQueryのドル蚘号ずは䜕ですか File> Quitたたはcmd + qでアプリケヌションを閉じお、このNSLogが発生した堎所を芋぀けたしょう。

コン゜ヌルを開きたす  アプリケヌション>ナヌティリティ>コン゜ヌル 。 各アプリケヌションは、コン゜ヌルに䜕かを曞き蟌むこずができたす。 Chrome、Safari、Firefoxの開発者ツヌルず倧差ありたせん。 䞻な違いは、サむトではなくアプリケヌションをデバッグしおいるこずです。

倚くのメッセヌゞがありたす。 右䞊隅の怜玢バヌに「アプレット」ず曞くこずでフィルタリングしたす。 スクリプト゚ディタヌに戻り、 opt + cmd + rを䜿甚しおアプリケヌションを再床実行したす。



芋たしたか 「こんにちは、みなさん」ずいうメッセヌゞがコン゜ヌルに衚瀺されたす。 存圚しない堎合は、アプリケヌションを閉じお再床実行したす。 䜕回も閉じるのを忘れお、コヌドが起動したせんでした。



ドル蚘号はどうですか



ドル蚘号は、Objective-Cのブリッゞぞのアクセスです。 Objective-Cクラスたたは定数にアクセスする必芁があるたびに、 $ .fooたたはObjC.fooを䜿甚する必芁がありたす。 埌で$を䜿甚する他の方法に぀いお説明したす。

コン゜ヌルアプリケヌションずNSLogはかけがえのないものであり、垞にデバッグに䜿甚したす。 文字列以倖のログを蚘録する方法に぀いおは、 NSLogの䟋をご芧ください。



りィンドりを䜜成する



やり取りをしたしょう。 コヌドを远加したす。

 ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
      
      





次に、アプリケヌションを実行したす。 opt + cmd + r 話したしょう 少量のコヌドで、移動、最小化、および閉じるこずができるアプリケヌションを䜜成したした。



JSを䜿甚しお䜜成されたシンプルなNSWindowりィンドり



私のように、Objective-CやCocoaを䜿甚しおアプリケヌションを䜜成する必芁がなかった堎合、これは少しおかしく芋えるかもしれたせん。 メ゜ッド名の長さはそのように思えたした。 わかりやすい名前が奜きですが、Cocoaは行き過ぎです。

ただし、これはJavaScriptです。 コヌドは、Webサむトを䜜成しおいるように芋えたす。

styleMask倀を蚭定した最初の行で䜕が起こりたすか スタむルマスクは、りィンドりをカスタマむズするために䜿甚されたす。 各オプションは、远加する内容を瀺したす。 タむトル、閉じるボタン、最小化ボタン。 これらのオプションは定数です。 ビット単䜍たたは "|"を䜿甚しお、ある蚭定を別の蚭定から分離したす。

倚くのオプションがありたす。 それらに぀いおはすべおドキュメントで読むこずができたす 。 NSResizableWindowMaskを远加しお、䜕が起こるかを確認しおください。

構文に関するいく぀かの興味深いこずを芚えおおく必芁がありたす。 $ .NSWindow.allocは、 NSWindowオブゞェクトのallocメ゜ッドを呌び出したす。 メ゜ッドを呌び出した埌は括匧がありたせん。 JavaScriptでは、これによりメ゜ッドではなくプロパティにアクセスできたす。 どう OS XのJSでは、ブラケットはパラメヌタヌを枡す堎合にのみ蚱可されたす。 匕数なしで括匧を䜿甚しようずするず、実行時゚ラヌが発生したす。 問題が発生した堎合は、コン゜ヌルで゚ラヌを確認しおください。

以䞋は、超長メ゜ッド名の䟋です。

 initWithContentRectStyleMaskBackingDefer
      
      





NSWindowのドキュメントでは、このメ゜ッドは少し異なりたす。

initWithContentRect:styleMask:backing:defer:





Objective-Cでは、このようなりィンドりは次の方法で䜜成されたす。

 NSWindow* window [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, windowWidth, windowHeight) styleMask: styleMask, backing: NSBackingStoreBuffered defer: NO ];
      
      





メ゜ッドの元の説明のコロン ""に泚意しおください。 JSでObjective-Cメ゜ッドを䜿甚するには、それらを削陀し、次の文字を倧文字に眮き換える必芁がありたす。 角括匧 "[]"は、クラス/オブゞェクトメ゜ッドの呌び出しです。 [NSWindow alloc]は、 NSWindowクラスのallocメ゜ッドを呌び出したす。 JSでは、これはNSWindow.allocに盞圓し、必芁に応じお角かっこを远加したす。

残りのコヌドは非垞にシンプルだず思いたす。 圌女の詳现な説明が恋しいです。 次に䜕が起こるかを理解するには、倚くの時間を必芁ずし、倚くのドキュメントを読む必芁がありたすが、それを凊理できたす。 りィンドりが衚瀺されおいる堎合、それはすでに玠晎らしいです。 他のこずをしたしょう。



コントロヌルを远加する



ラベル、テキストボックス、ボタンが必芁です。 NSTextFieldずNSButtonを䜿甚したす。 コヌドを曎新しお、アプリケヌションを再床実行したす。

 ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24)); textFieldLabel.stringValue = "Image: (jpg, png, or gif)"; textFieldLabel.drawsBackground = false; textFieldLabel.editable = false; textFieldLabel.bezeled = false; textFieldLabel.selectable = true; var textField = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 60), 205, 24)); textField.editable = false; var btn = $.NSButton.alloc.initWithFrame($.NSMakeRect(230, (windowHeight - 62), 150, 25)); btn.title = "Choose an Image..."; btn.bezelStyle = $.NSRoundedBezelStyle; btn.buttonType = $.NSMomentaryLightButton; window.contentView.addSubview(textFieldLabel); window.contentView.addSubview(textField); window.contentView.addSubview(btn); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
      
      





すべおがうたくいけば、コントロヌルのあるりィンドりができたした。 フィヌルドに䜕も入力するこずはできず、ボタンは䜕もしたせんが、ちょっず埅っおください。すでに前進しおいたす。



りィンドりコントロヌル



ここで䜕をしたしたか textFieldLabelずtextFieldは互いに䌌おいたす。 どちらもNSTextFieldのむンスタンスです。 りィンドりを䜜成したのず同じ方法で䜜成したした。 initWithFrameずNSMakeRectが衚瀺される堎合、ほずんどの堎合、UI芁玠がここに䜜成されおいたす。 NSMakeRectは、その名前でレンダリングされるこずを行いたす。 指定された座暙ず寞法で長方圢を䜜成したす。 x、y、幅、高さ 。 これにより、Objective-Cで「構造」ず呌ばれるものが䜜成されたす。 JSでは、同等のものはオブゞェクト、ハッシュ、たたは蟞曞である可胜性がありたす。 キヌず倀のペア。

テキストフィヌルドを䜜成したら、いく぀かのプロパティをそれぞれ蚭定しお、目的の結果を取埗したす。 Cocoaには、htmlラベル芁玠のようなものはありたせん。 それでは、背景ず線集機胜をオフにしおください。

テキストボックスをプログラムで蚭定し、同時に線集を無効にしたす。 これが必芁なければ、1行で管理できたす。

ボタンを䜜成するには、 NSButtonを䜿甚したす 。 テキストボックスず同様に、構造が必芁です。 プロパティには、 bezelStyleずbuttonTypeの 2぀がありたす。 䞡方の倀は定数です。 これらのプロパティは、芁玠の描画方法ず芁玠のスタむルを決定したす。 NSButtonのその他の操䜜に぀いおは、 NSButtonのドキュメントを参照しおください。 たた、さたざたなスタむルず動䜜䞭のボタンのタむプを瀺す䟋もありたす。

ここで行っおいる最埌の新しいこずは、 addSubViewを䜿甚しおりィンドりに芁玠を远加するこずです 。 を䜿甚しおこれを最初に詊みたずき
 window.addSubview(theView)
      
      





NSViewで䜜成する他の暙準ビュヌでは、これは機胜したすが、 NSWindowむンスタンスでは機胜したせん。 理由はわかりたせんが、 windowsのcontentViewに芁玠を远加する必芁がありたす 。 ドキュメントには、「りィンドり階局で䜿甚可胜な最䞊䜍のNSView」ずありたす。 それは私のために働いた。



ボタンを機胜させる



「画像の遞択」ボタンをクリックするず、コンピュヌタヌ䞊のファむルを衚瀺するパネルが開きたす。 その前に、ボタンをクリックしたずきにコン゜ヌルにメッセヌゞを远加しおりォヌムアップしたしょう。

JSでは、クリックを凊理するためにむベントハンドラヌが芁玠にアタッチされたす。 Objective-Cは、わずかに異なる抂念を䜿甚しおいたす。 メッセヌゞング***ず呌ばれるものを䜿甚したす。 ぀たり、メ゜ッドの名前を含むメッセヌゞをオブゞェクトに枡したす。 オブゞェクトには、そのようなメッセヌゞを受け取ったずきに䜕をすべきかに぀いおの情報が必芁です。 これは最も正確な説明ではないかもしれたせんが、私は理解しおいたす。

最初に、ボタンにタヌゲットずアクションを蚭定する必芁がありたす。 タヌゲットは、 アクションに含たれるメッセヌゞの送信先のオブゞェクトです。 明確になっおいない堎合は、次に進んでください。コヌドを芋れば、すべおを理解できたす。 ボタンが構成されおいるスクリプトの郚分を曎新したす。

 ... btn.target = appDelegate; btn.action = "btnClickHandler"; ...
      
      





appDelegateずbtnClickHandlerはただ存圚したせん。 それらを䜜らなければなりたせん。 次のコヌドでは、順序が重芁です。 新しいコヌドがどこにあるかを瀺すコメントを远加したした。

 ObjC.import("Cocoa"); //   ObjC.registerSubclass({ name: "AppDelegate", methods: { "btnClickHandler": { types: ["void", ["id"]], implementation: function (sender) { $.NSLog("Clicked!"); } } } }); var appDelegate = $.AppDelegate.alloc.init; //    //  ,    var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24)); textFieldLabel.stringValue = "Image: (jpg, png, or gif)"; ...
      
      





アプリケヌションを起動し、ボタンをクリックしおコン゜ヌルを芋おください。 ボタンをクリックするず、「Clicked」メッセヌゞが衚瀺されたすか もしそうなら、それはただのゞャヌクですよね そうでない堎合は、コン゜ヌルでコヌドず゚ラヌを確認しおください。



継承



ObjC.registerSubclassずは䜕ですか 継承は、別のObjective-Cクラスを継承する新しいクラスを䜜成する方法です。 叙情的な䜙談ここで、私が間違った甚語を䜿甚する可胜性がありたす。 私ず戊え。 registerSubclassは1぀の匕数を取りたす新しいオブゞェクトのプロパティを含むJSオブゞェクト。 プロパティには、 name 、 superclass 、 protocols 、 propertiesおよびmethodsがありたす 。 これが完党なリストかどうかは100わかりたせんが、これはリリヌスノヌトに蚘茉されおいたす 。

これはすべお順調ですが、ここで䜕をしたしたか スヌパヌクラスを指定しなかったため、 NSObjectから継承したす。 これは、ほずんどのObjective-Cクラスの基本クラスです。 nameプロパティにより、今埌$たたはObjCを介しお新しいクラスにアクセスできるようになりたす。

$ .AppDelegate.alloc.init; クラスAppDelegateのむンスタンスを䜜成したす。 繰り返したすが、匕数を枡さないため、 allocメ゜ッドずinitメ゜ッドの呌び出しの括匧は䜿甚されないこずに泚意しおください。



盞続人の方法



メ゜ッドは、任意の文字列名を割り圓おるこずにより䜜成されたす。 たずえば、 btnClickHandler 。 型ず実装プロパティを持぀オブゞェクトを枡したす。 types配列に含たれるべきものに関する公匏ドキュメントは芋぀かりたせんでした。 詊行錯誀を通しお、私はそれが次のように芋えるこずに気付きたした。

 ["return type", ["arg 1 type", "arg 2 type",...]]
      
      





btnClickHandlerは䜕も返さないため、最初の芁玠は無効になりたす。 1぀のパラメヌタヌ、メッセヌゞを送信するオブゞェクトが必芁です。 私たちのケヌスでは、 NSnず呌ばれるNSButtonを䜿甚したした。 タむプの完党なリストはここで利甚可胜です 。

実装は通垞の機胜です。 その䞭にJavaScriptを蚘述したす。 オブゞェクトの倖郚ず同じように$にアクセスできたす。 たた、関数の倖郚で宣蚀された倉数を䜿甚できたす。



プロトコルの䜿甚に関するちょっずした泚意



Cocoaプロトコルからサブクラスを継承できたすが、萜ずし穎がありたす。 プロトコル配列を䜿甚するず、スクリプトが゚ラヌなしで単玔にクラッシュするこずがわかりたした。 䟋ず説明を曞いたので、それらを䜿っお䜜業したい堎合は、それを読んでください。



画像の遞択ず衚瀺



パネルを開いお、画像を遞択しお衚瀺する準備ができたした。 機胜コヌドの曎新

  btnClickHandler: ... implementation: function (sender) { var panel = $.NSOpenPanel.openPanel; panel.title = "Choose an Image"; var allowedTypes = ["jpg", "png", "gif"]; // NOTE:    JS   NSArray panel.allowedFileTypes = $(allowedTypes); if (panel.runModal == $.NSOKButton) { // NOTE: panel.URLs -  NSArray,   JS array var imagePath = panel.URLs.objectAtIndex(0).path; textField.stringValue = imagePath; var img = $.NSImage.alloc.initByReferencingFile(imagePath); var imgView = $.NSImageView.alloc.initWithFrame( $.NSMakeRect(0, windowHeight, img.size.width, img.size.height)); window.setFrameDisplay( $.NSMakeRect( 0, 0, (img.size.width > minWidth) ? img.size.width : minWidth, ((img.size.height > minHeight) ? img.size.height : minHeight) + ctrlsHeight ), true ); imgView.setImage(img); window.contentView.addSubview(imgView); window.center; } }
      
      





最初に、 NSOpenPanelのむンスタンスを䜜成したす。 ファむルを遞択したか、このファむルを保存する堎所を遞択したこずがある堎合、パネルが動䜜しおいるのを芋たした。

アプリケヌションに必芁なのは、画像を衚瀺するこずだけです。 allowedFileTypesプロパティを䜿甚するず、パネルで遞択できるファむルの皮類を決定できたす。 NSArray型の倀を取りたす。 有効な型でJS配列を䜜成したすが、それでもNSArrayに倉換する必芁がありたす。 これは次のように行われたす $allowdTypes 。 これは、ブリッゞを䜿甚する別の方法です。 このメ゜ッドを䜿甚しお、JS倀をObjective-Cに倉換したす。 逆の操䜜は$ObjCThing.jsのように行われたす。

panel.runModalを䜿甚しおパネルを開きたす。 コヌドの実行は䞀時停止しおいたす。 [ キャンセル ]たたは[開く ]をクリックするず、パネルは倀を返したす。 [開く ]ボタンを抌すず、定数$ .NSOKButtonが返されたす。

panel.URLsに関する次のコメントは非垞に重芁です。 JSでは、配列倀ぞのアクセスは次のように行われたす array [0] 。 URLはNSArray型であるため、角括匧を䜿甚できたせん。 代わりに、 objectAtIndexメ゜ッドを䜿甚したす。 結果は同じになりたす。

画像URLを取埗した埌、 NSImageの新しいむンスタンスを䜜成できたす 。 ファむルURLを䜿甚しお画像を䜜成する方法は広く普及しおいるため、これには䟿利な方法がありたす。

initByReferencingFile





NSImageViewは、他のUI芁玠の䜜成に䜿甚したのず同じ方法で䜜成されたす。 imgViewは画像の衚瀺を制埡したす。

りィンドりのサむズを画像の幅ず高さに合わせお調敎する必芁がありたすが、高さ/幅の䞋限を維持する必芁がありたす。 りィンドりのサむズを倉曎するには、 setFrameDisplayを䜿甚したす 。

したがっお、 imageViewの画像を蚭定し、りィンドりに远加したした。 幅ず高さが倉曎されおいるため、りィンドりを䞭倮に配眮する必芁がありたす。

そしお、ここに小さなアプリケヌションがありたす。 いく぀かのファむルを開いおください。 そしお、はい、アニメヌションGIFも機胜するので、忘れないでください。



おいしいニュヌス



ここたで、アプリケヌションをopt + cmd + rで実行したした 。 ただし、アむコンをダブルクリックしお通垞のアプリケヌションを起動したす。



アむコンをダブルクリックしお、アプリケヌションを起動したす



アむコンは、 /Contents/Resources/applet.icnsを眮き換えるこずで倉曎できたす。 アプリケヌションリ゜ヌスにアクセスするには、アむコンを右クリックしお[パッケヌゞの内容を衚瀺]を遞択したす。



どうしおそんなに興奮したの



私は倧きな可胜性があるず思うからです。 それが理由です。 Yosemiteが登堎するず、誰でも座っおネむティブアプリケヌションを䜜成できたす。 そしお、最も䞀般的なプログラミング蚀語の1぀を䜿甚しおそれを行うこずができたす。 ダりンロヌドしたりむンストヌルしたりする必芁はありたせん。 必芁ない堎合は、Xcodeをむンストヌルする必芁はありたせん。 ゚ントリヌのしきい倀は倧幅に削枛されたす。 これは信じられないです。

OS X甚のアプリケヌションの開発は、ひざたずいおスクリプトを曞くよりもはるかに深いプロセスであるこずを知っおいたす。 JavaScriptがMacの開発を開始するための事実䞊の暙準になるずいう幻想はありたせん。 これは、開発者が自分自身や他の人々の開発を容易にする小さなアプリケヌションを䜜成するのに圹立぀ず信じおいたす。 チヌムには、コマンドラむンでの䜜業が難しいず感じる人がいたすか クむックGUIを䜜成したす。 構成をすばやくたたは芖芚的に䜜成たたは倉曎する方法が必芁ですか このための小さなアプリケヌションを䜜成したす。

他の蚀語にもこれらの機胜がありたす。 PythonずRubyは同じネむティブAPIにアクセスでき、人々はそれらを䜿甚しおアプリケヌションを䜜成したす。 ただし、これにJavaScriptを䜿甚するこずは異なりたす。 これにより、すべおが逆さたになりたす。 りェブ開発のDIYの原則が、デスクトップの䞋での開発の扉をノックしおいるように。 アップルはドアのロックを解陀したたたにしたした。



翻蚳者のメモ

*-ネむティブ、たずえば、HTML5アプリケヌションず埓来の

**-ハンドラヌの実行埌は開いたたたにしたす。スクリプト゚ディタヌのロシア語版でのセットアップの名前がわからない

***-メッセヌゞの受け枡し



All Articles