iPadでScratch
自分なりのDynabookを作ろう
第64回Smalltalk勉強会
合同会社ソフトウメヤ 梅澤真史
モノは既にある
● J. M. MacintoshさんによるScratch Viewer
https://github.com/johnmci/Scratch.app.for.iOS
● 当時はApp Storeでの配布が許されなかった
顛末は...
https://mobilewikiserver.com/Scratch.html
● 2011年4月にgithubに置かれ、放置
でも今は??
ガイドライン的にはOK (にできる)
● アプリケーション審査ガイドライン
https://developer.apple.com/jp/appstore/guidelines.html
https://developer.apple.
com/programs/terms/ios/standard/ios_program_standar
d_agreement_20130610.pdf
● ダウンロードしたプログラムを実行、インストールしなければ
OK
○ Scratch Viewerはまさにこれ
● プロジェクトの保存、読み込みをローカルに限定すれば問題
ない
復活の試み(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 など
復活の試み(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…
ビルド成功!!
あとはお好きなように...
● Objective-CとSmalltalkの知識があれば、
好きな用にカスタマイズできます!!
ObjC部分のクラス解説(1)
● ScratchIPhoneAppDelegate
○ 最初に見るべきクラス。中心的なコントローラとしての役
割を持つ。ログイン処理、ScratchのVM起動、エラーの
レポートなどを統括
● ScratchIPhonePresentationSpace
○ Scratch本体の表示を行う
● LoginViewController
○ Scratchアカウントへのログインを行う。ローカルで閉じ
る際には不要
● CSCWebsiteViewController
○ Scratchのプロジェクトサイトにアクセスするためのコント
ローラ。ローカルで閉じるなら不要
ObjC部分のクラス解説(2)
● ASI* シリーズ
○ 非同期でHTTP通信を行わせるためのもの
http://allseeing-i.com/ASIHTTPRequest
○ ローカルで閉じる場合は不要
● SqueakNoOGLIPhoneAppDelegate
○ ScratchIPhoneAppDelegateのスーパークラス。画面の回
転、レンダラ(View)の選択など
● SqueakUIViewCALayer
○ Scratch本体画面のView
● SqueakUIViewOpenGL
○ 本体画面のView。高速。Retinaディスプレイでは、正しく動
作しない (極端に小さく表示)
Smalltalk部分の変更
● 基本的な流れ
○ Scratch.imageをMac上のSqueak VMで立ち上げ、開
発者モードに移行する
○ 開発者モードでSmalltalkプログラミング
○ ユーザモードに復帰してイメージをセーブ
■ 変更部分は チェンジセットで書き出しておくと良い
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”
Smalltalk部分のクラス解説
● IPhoneScratchProxy
○ ObjCとScratchFrameMorphとのつなぎ役。
○ startUpクラスメソッド内で、ObjC側から呼び出し
可能となるメソッド群をエクスポートしている
■ ObjectiveCSqueakProxy>>addSigViaString:
aString aSignature: aSignatureString
● ObjectiveCBridge
○ Smalltalk側からObjCのメソッドや関数を呼び出すため
のブリッジ
ObjectiveCBridgeの例
● NotificationCenterによる通知
dfc := (ObjectiveCBridge classObjectForName:
#NSNotificationCenter)defaultCenter.
dfc postNotificationName: squeakVMIsReadyNow
object: nil asObjc.
● 任意のObjective-C のメソッドを
Smalltalkから呼び出し可能
Scratch for iPad
● Scratch for iPad
○ iPadに特化し、ローカルに閉じる形にカスタマイズしたア
プリの開発中。
○ App Storeにデビューさせる
● 現状
○ ログイン画面、プロジェクトダウンロードの消去
○ iPad用に画面の大型化
○ レンダラの修正
■ Retina でも表示可能なように
○ Tapの調整
■ 簡単にタップできるように
などなど修正中 。ちょっとデモ。
テスター募集中!!
● TestFlightで皆さんのiPadにインストールし、テス
トできます
https://www.testflightapp.com
● ご興味のある方はume@softumeya.comまで

iPadでScratch