14
iPadScratch 自分なりのDynabookを作ろう 64Smalltalk勉強会 合同会社ソフトウメヤ 梅澤真史

iPadでScratch

Embed Size (px)

DESCRIPTION

iPadでScratchを動かすためのポイント解説です

Citation preview

Page 1: iPadでScratch

iPadでScratch自分なりのDynabookを作ろう

第64回Smalltalk勉強会

合同会社ソフトウメヤ 梅澤真史

Page 2: iPadでScratch

モノは既にある

● J. M. MacintoshさんによるScratch Viewerhttps://github.com/johnmci/Scratch.app.for.iOS

● 当時はApp Storeでの配布が許されなかった顛末は...https://mobilewikiserver.com/Scratch.html

● 2011年4月にgithubに置かれ、放置

でも今は??

Page 3: iPadでScratch

ガイドライン的にはOK (にできる)

● アプリケーション審査ガイドラインhttps://developer.apple.com/jp/appstore/guidelines.htmlhttps://developer.apple.com/programs/terms/ios/standard/ios_program_standard_agreement_20130610.pdf

● ダウンロードしたプログラムを実行、インストールしなければOK○ Scratch Viewerはまさにこれ

● プロジェクトの保存、読み込みをローカルに限定すれば問題ない

Page 4: iPadでScratch

復活の試み(1)

● 元はXcode 3系、iOS 3.1用のプロジェクト

なので、 Xcode 5系、iOS 7用にコンパイル できるようにしていく

● Build Settings○ コンパイラをApple LLVM 5.1に○ -fno-cse-follow-jumps コンパイルオプションを外す

● General○ Bundle Identifierを適当なものに

■ com.softumeya.MyScratch など

Page 5: iPadでScratch

復活の試み(2)

● ソースの修正○ Other Sources/platforms/iOS/iPhone/sqPlatformSpecific.h

■ マクロの修正。LLVM 5.1になったため

○ Other Sources/CSCScratchiPhoneInterface/ScratchiPhoneAppDelegate.m■ 有効なemailアドレスの指定。とりあえずコメントアウト

#define ReturnFromInterpret() return↓

#define ReturnFromInterpret() return 0

#error you must alter the localization data…

↓//#error you must alter the localization data…

ビルド成功!!

Page 6: iPadでScratch

あとはお好きなように...

● Objective-CとSmalltalkの知識があれば、好きな用にカスタマイズできます!!

Page 7: iPadでScratch

ObjC部分のクラス解説(1)● ScratchIPhoneAppDelegate

○ 最初に見るべきクラス。中心的なコントローラとしての役

割を持つ。ログイン処理、ScratchのVM起動、エラーの

レポートなどを統括

● ScratchIPhonePresentationSpace○ Scratch本体の表示を行う

● LoginViewController○ Scratchアカウントへのログインを行う。ローカルで閉じ

る際には不要

● CSCWebsiteViewController○ Scratchのプロジェクトサイトにアクセスするためのコント

ローラ。ローカルで閉じるなら不要

Page 8: iPadでScratch

ObjC部分のクラス解説(2)● ASI* シリーズ

○ 非同期でHTTP通信を行わせるためのものhttp://allseeing-i.com/ASIHTTPRequest

○ ローカルで閉じる場合は不要

● SqueakNoOGLIPhoneAppDelegate○ ScratchIPhoneAppDelegateのスーパークラス。画面の回

転、レンダラ(View)の選択など

● SqueakUIViewCALayer○ Scratch本体画面のView

● SqueakUIViewOpenGL○ 本体画面のView。高速。Retinaディスプレイでは、正しく動

作しない (極端に小さく表示)

Page 9: iPadでScratch

Smalltalk部分の変更

● 基本的な流れ○ Scratch.imageをMac上のSqueak VMで立ち上げ、開

発者モードに移行する○ 開発者モードでSmalltalkプログラミング○ ユーザモードに復帰してイメージをセーブ

■ 変更部分は チェンジセットで書き出しておくと良い

Page 10: iPadでScratch

MacからのScratch.imageの起動

● レガシーVMを使うこと(Cog VMではない)○ Squeak3.10.2J-all-in-one.zip同梱のSqueak-4.2.2.

bata1Uが便利

○ http://sourceforge.jp/projects/squeak-ja/downloads/51524/Squeak3.10.2J-all-in-one.zip/

● Scratch.imageを指定して、Scratchが立ち上がったら、Shiftキーを押しながらFileメニューを選び、”Exit User Mode”で開発者モードに

● 抜け出るときは”Save Image in User Mode”

Page 11: iPadでScratch

Smalltalk部分のクラス解説

● IPhoneScratchProxy○ ObjCとScratchFrameMorphとのつなぎ役。

○ startUpクラスメソッド内で、ObjC側から呼び出し

可能となるメソッド群をエクスポートしている

■ ObjectiveCSqueakProxy>>addSigViaString: aString aSignature: aSignatureString

● ObjectiveCBridge○ Smalltalk側からObjCのメソッドや関数を呼び出すため

のブリッジ

Page 12: iPadでScratch

ObjectiveCBridgeの例

● NotificationCenterによる通知

dfc := (ObjectiveCBridge classObjectForName: #NSNotificationCenter)defaultCenter.

dfc postNotificationName: squeakVMIsReadyNow object: nil asObjc.

● 任意のObjective-C のメソッドをSmalltalkから呼び出し可能

Page 13: iPadでScratch

Scratch for iPad

● Scratch for iPad○ iPadに特化し、ローカルに閉じる形にカスタマイズしたア

プリの開発中。 ○ App Storeにデビューさせる

● 現状○ ログイン画面、プロジェクトダウンロードの消去○ iPad用に画面の大型化○ レンダラの修正

■ Retina でも表示可能なように○ Tapの調整

■ 簡単にタップできるように

などなど修正中 。ちょっとデモ。

Page 14: iPadでScratch

テスター募集中!!

● TestFlightで皆さんのiPadにインストールし、テストできます

https://www.testflightapp.com

● ご興味のある方は[email protected]まで