合宿して開発

開発合宿

にいきました、3週間前に。
場所は湯河原のおんやど恵
開発合宿プランがあってBlogを書くと料金が半額になるプランがあって有名なところ、これを使った。
開発合宿モニタープラン
メンバーはhiragramチームのなかまたち hiragr.am

すすめかた

Kibelaでしおりをつくってもらっていた、持ち物からタイムスケジュールとお昼のお店まで書いてあってとても便利だった。 困ったらここを見る的なところを作っておくと捗る。

hiragram.kibe.la

ChatはSlackに#gassuku Channel作ってやっていた。がっすく。

宿代とかでかめのお金だけ現金で払ってタクシーとか電車とかご飯のお金はKyashでやった。Kyash便利最高、現金で集金してくる飲み会に行きたくない。

ウォレットアプリ Kyash - いつものお支払いを2%お得に

やったこと

WKWebViewで遊んでた。成果物は別途書く(かも)
業務ではRailsJavaScriptしか書いていないので、新鮮
学べたこととして、JSからNativeの処理を呼び出したいときはpostMessageみたいな要領でいける。
WKUserScript作って、WKWebViewに突っ込むだけでできる。
ちょっと詰まったところとして、WKUserScriptを生成するときにいつJSを実行するかのinjectionTimeを指定できるんですがどうも想定どおりにうまくうごかず、.atDocumentEndを指定してもJS実行時にまだDOMができてない、みたいなことがあったので、JS側で頑張るようにした。
https://developer.apple.com/documentation/webkit/wkuserscript/1537750-init

// 差し込みたいJS
let path = Bundle.main.path(forResource: "main", ofType: "js")!
if let data = NSData(contentsOfFile: path){
    script = String(NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue)!)
}
let userScript = WKUserScript(source: script, injectionTime: .atDocumentEnd, forMainFrameOnly: true)        
let controller = WKUserContentController()
controller.addUserScript(userScript)
// callbackHandlerに対してpostMessageをするので、JavaScriptはcallback名を知っている必要がある
controller.add(self, name: "callbackHandler")

let configuration = WKWebViewConfiguration()
configuration.userContentController = controller
self.webView = WKWebView(frame: view.bounds, configuration: configuration)

JS側で取れるまで回してclearIntervalした(本当はもうちょっとちゃんとやるべき)
.atDocumentEndDOMContentLoaded相当で onloadじゃない?のかな(?)
もちろん DOMContentLoadedで書き出されるであろう値に関しては問題ないんですが最近のSPA的にJSがDOMをRenderingしていく場合だと気にする必要がありそう。
なので下記Sampleだとtitleタグを取ってるだけなので再現はしません。

// main.js
var callback = function(){
    var ele =document.querySelector("title")
    webkit.messageHandlers.callbackHandler.postMessage(ele[0].text);
    clearInterval(setIntervalId);
}
var setIntervalId = setInterval(callback, 1000)

感想

今回のメンバーはみんな得意分野(Swiftマン、美味しいお店、オタク)が違う人がいて、雑に質問とかを投げあえてる感じがよかった。
Swift周りで詰まってて古い情報見て悩んでたりしたのを教えてくれたりしたのでいっぱいSwiftできたのがよかった。合宿後もちょくちょく進めている。
旅館の真隣にローソンができていてよかった(ちょっと前にできたらしい)

夜中足湯コーディング、ふやける

会議室広くてよかったので、また行ったりしたい。