Nifty Cloud Mobile Backendでプッシュ通知のお話

こんにちは増島です! 先日シン・ゴジラを見たのですが、僕の生活圏内の街がことごとく破壊されていたのでとてもショックでした。 話は変わりますが、作成しているアプリでNifty Cloud Mobile Backendを使用しています。プッシュ通知の実装の機会があったので、今回はその話をします! 環境 【ネイティブ】 iOS 【サーバサイド】 Node.js はじめに Mobile Backendのコンソールから手作業でプッシュ通知を送ることもできますが、 今回の例はサーバ側のイベントをトリガーに対象を絞ってプッシュ通知を送る例です。 証明書の登録やデバイストークン取得処理については今回触れません。 それらについては下記のページをご参照下さい。 http://mb.cloud....

Swiftでスライダーライブラリを作って学んだあれこれ

こんにちは増島です! オニドリルにモンスターボールを60個使用しましたが捕獲出来ず、悔しさで眠れませんでした。家の近くにポケストップがあまり無いのでモンスターボールの確保にはいつも必死です。 話は変わりますが、以前iOSのスライダー系のライブラリを公開しました。 その際CoreGraphicsやUIControlなどあまり触れていなかった部分を触ることが出来てとても勉強になりました。 今回は作成を通して学んだ事をiOSのTipsとしてお話します! 公開したライブラリはこちらになります。 https://github.com/shushutochako/CircleSlider UISliderを円形にしたイメージでしょうか! 使い方によってプログレス表示なども出来るようになってます。 UIViewをくり抜く アプリのチュートリアルなどでボタンのヒント表示などで使われているのをよく見ますね! 今回のライブラリだと円形のバーの内側のところで使われています。 internal class TrackLayer: CAShapeLayer { internal init(bounds:...

iOS8での「Hiragino Sans」の罠

こんにちは増島です。 iOS10のリリースがもうすぐですね! エンジニアの方は嬉しさとともに10対応が心配なのではないでしょうか。 サポート対象にするOSはアプリごとに異なると思いますが、ある程度の歴史があったりで10リリース以降も暫くはiOS8もサポート対象にするプロジェクトも多いかと思います。 作成中のアプリでは10リリース以降もiOS8以降をターゲットにする方針なのですが、 タイトルの内容で少しハマってしまったのでお話したいと思います! 新規に画面を作成したところiOS8のみ遷移に時間が掛かってしまうという事象がありました。 今回はサンプルということで、この通り一つUILabelがあるだけの簡単な画面で事象を再現します。 こちらの画面の読み込みにかかる時間を計測してみます! AppDelegate.swift func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // 起動時の時間を保持する startTime...

FizzBuzzコードゴルフ

お久しぶりです、和田です。 本日はFizzBuzzとコードゴルフについて紹介です。 FizzBuzz? FizzBuzzとは、 最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」...

iOSのライブラリを宣伝できるサービスまとめ

こんにちは増島です! オープンソースライブラリを作成してGitHubで公開したものの中々スターがつかない‥ なんていうことありますよね! 今回はiOSのライブラリ作成したら宣伝に使いたいサービスをまとめました!! またライブラリ探す場合にも使えるので、是非参考になればと思います。 ライブラリ管理ツールから使用出来るようにする どこかのサイトなどに載せてもらう前にまずはこれでしょうか! 使用する側としてはライブラリは一元管理したいもの。これらのツールに対応することで圧倒的に注目度が変わるのではないでしょうか! ちなみにiOS用のツールはこのようなものがあります。 CocoaPods https://cocoapods.org/ Carthage https://github.com/Carthage/Carthage Swift Package Managerが公式から出たことによって、Swift製のプロジェクトではこれらのツールがどう活用されていくか‥ という感じですがまだまだ使用しているプロジェクトは多いかと思います。...

MongoDBでバッチ処理

こんにちは増島です! 実家の猫が昨日19歳の誕生日を迎えました。月日が経つのは早いものです(*´∀`*) 話は変わりますが、MongoDBを日次バッチで改廃したい要件があったので調べてみました! 概要 今回僕がバッチ処理で実現したかったのが、下記の内容でした。 処理対象のスキーマ Rooms Messages スキーマ補足 Messageは一つのRoomに属する Roomは複数のMessageを持つ 処理内容 Roomsから作成日付が60日前のデータのroomIdを抽出する 1で抽出されたドキュメントをRoomsから削除 Messagesから1で抽出されたroomIdを持つドキュメントを削除 javascriptを渡して実行 MongoDBに対してシェルなどから操作したい時は処理内容を記述したjavascriptファイルを用意してmongoクライアントに渡すのが簡単そうでした。 実行するスクリプト [delete_expiration.js] var expirationDate...

reactとreduxを使ったExampleのソースコードリーディング:todos編

はじめに 株式会社あゆたの毛利です。 この記事は、第9回これから始める人のためのNode.js,React.js勉強会用の資料です。 ざっくりまとめただけなので、おかしなところがあったらご指摘ください。 今回のネタのreduxのexampleのtodosのソースコードはこちら 一応公式にも解説があるのですが、英語なのと私自身ソースの流れを見ないといまいち理解ができなかったので、まとめてみました。 exampleはES2015で書かれているので必要に応じてその解説もしていきます。 対象、前提 Javascriptが理解できている。 Reactがなんとなく理解できている。 動かしてみる場合は、node.jsがインストールされていてnpmが使用できる環境がある。 ソースをダウンロードして動かしてみる こちらからダウンロード(もしくはgit clone)してください。...

Socket.IO-Client-Swiftでリアルタイム通信

こんにちは増島です。 アプリ内でリアルタイム通信機能を入れようと思い、 折角なので使ったことのないSocket.ioを使ってみました!! 今回はイベントの送信や受信の実装部分を簡単に説明したいと思います! Socket.IO-Client-Swift ネイティブ側のライブラリは「Socket.IO-Client-Swift」を使用しました。 Socket.IO-Client-SwiftはSocket.ioの公式Swiftクライアントライブラリです。 iOS用のクライアントライブラリは他にも「SocketRocket」「SIOSocket」などがあるようです。 https://github.com/facebook/SocketRocket https://github.com/...

コマンドラインで快適生活

こんにちは増島です! アプリエンジニアの方だと、普段Mac OS Xで開発していてもコマンドラインを使う機会の少ない人も多いかと思います。 直接的に必要はなくとも、面倒な作業を効率よくしたいときにコマンドを知っていると便利だと感じます! 今回は僕がよく使うコマンドを紹介します。 wc テキストやファイルの行数を調べるコマンドです。 ファイルを渡すと行数,単語数,バイト数がそれぞれ表示されます。 $ wc aaa.txt 35 66 1722 aaa.txt $ ファイルでなくともテキストをパイプで入力して調べることもできます。 $ echo "aaa" | wc 1...

Swiftでくるくる落ちるアニメーション

こんにちは増島です! 今回はiOSの話をします! 最近ではリッチなアニメーションをしてるアプリを見る機会も多くなってきましたね。 アニメーション系の実装方法を色々知っておくと便利かと思います。 iOSでアニメーションの実装方法はUIViewのメソッドやCore Animationなど色々あるかと思いますが、今回はCore Animationのいくつかのクラスを使用してタイトルの通りのアニメーションを実装してみました。 完成はこのような感じです! このアニメーションでは「CABasicAnimation」「CAAnimationGroup」「CATransform3DMakeRotation」などを使用して三つのアニメーションを同時実行しています。 Z方向に横回転するアニメーション 上から下に移動するアニメーション 最前面に表示し続けるアニメーション Z方向に回転するアニメーション アニメーションの定義はこの通りです。 // 回転 let rotateAnimation = CABasicAnimation(keyPath: "transform") rotateAnimation....