AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

カテゴリー: iOS

iOSアプリの証明書とプロビジョニングプロファイルの有効期限が後何日で切れるかを毎週自動でSlackに通知してみた


ios-cers-and-profiles-bot

はじめまして。三井田(みいだ)です。
4月に新卒としてハンズラボに入社して、早半年がたちました。
大学時代は授業で情報科学などを勉強する傍ら、UnityでモバイルARアプリを開発したり、個人開発のAndroidアプリをGoogle Playに公開したりしていました。
入社後は、新人研修の仮想プロジェクトでひたすらjQueryを書き続ける日々を送った後、現在のチームに配属され、DynamoDBを管理したり、PythonでLambdaを書いたり、PHPとJSで管理画面をより使いやすく改善したりしています。

さて、今回は多くのiOS開発者を悩ませる(?)、iOSアプリの証明書とプロビジョニングプロファイルについてのお話です。

やばい!iOSアプリの証明書の有効期限がっ…!!

1年に1回更新しなければならない、iOSアプリの証明書とプロビジョニングプロファイル。ついつい有効期限を忘れてしまい、期限が切れる直前(もしくは切れた後)に慌てて更新、なんてことはありませんか?
弊社でも先日、とあるiOSアプリの証明書の有効期限が切れる寸前になっていました。
その時は弊社エンジニアが気づき、緊急アップデートを行って難を逃れたのですが、もし気づくのが遅れて、証明書の有効期限が切れてしまっていたら。。。と思うとゾッとします。

そこで、iOSアプリの証明書、プロビジョニングプロファイルの更新忘れを防ぐために、証明書、プロビジョニングプロファイルの有効期限が後何日で切れるかを、毎週自動でSlackに通知するようにしてみました!

こんな感じです

ios-certificates-and-profiles-bot

毎週指定の時刻になると、管理サーバーでシェルスクリプトが自動実行されます(cron)。
スクリプトでは、証明書、プロビジョニングプロファイルの入ったプライベートリポジトリをgit pullした後、リポジトリ内の各.cer、.mobileprovisionファイルについて、後何日で有効期限が切れるのかを計算し、その結果をSlackに通知します。
【**注意!**】証明書、プロビジョニングプロファイルは厳重に管理してください!

スクリプトのソースコードはこちら(GitHub)です。(Linux環境用です。ローカルのMacで実行したい場合は、「$ brew install coreutils」を行った後、「date」コマンドの代わりに「gdate」コマンドを使えば実行できます。)

流れとしては、iOSアプリ証明書の有効期限を取得し、「年/月/日」の形にした後、

後何日で有効期限が切れるのかを計算します。

そしてその結果を、Slackに投稿します。

プロビジョニングプロファイルについても有効期限を取得し、同様の処理を行います。(弊社iOSエンジニア駒場に有効期限の取得方法を教えてもらいました!)

30日以内に有効期限が切れる場合は、アイコンと文言を変えるようにしました。

emergency

【おまけ】有効期限が切れると…

expired
…切れないように気をつけましょう。

まとめ

iOSアプリの証明書とプロビジョニングプロファイルが後何日で切れるのか、Slackに毎週自動で通知されるようになったので、余裕をもって年次更新を行うことができるようになりました!
また、Slackに通知することで、特定の開発者だけが有効期限を把握するのではなく、より多くの人の目で期限をチェックできるのも良いですね!
それでは、今回はこの辺で。

Happy Coding! 😉

参考


はじめまして、1/1からハンズラボにジョインした平井です。


皆さま、はじめまして、1/1からハンズラボにジョインした、アプリケーションエンジニアの平井です。

〜自己紹介〜

■以前は何をやっていたのか

以前は、アプリケーションエンジニアとして、主にエンタープライズ向けのWebアプリや
BToC向けのWebサービスの開発に携わっていました。

■所属チームについて

今は外販のチームに所属しています。
Webアプリ/iOSアプリの開発や巷でホットなSORACOMを使った開発に携わっており、毎日が充実しています!

■今後について

田部井や井上が行っている様なAWSを活用したアーキテクチャ設計・構築や東急ハンズのノウハウを活かした自社サービスの立ち上げ(現時点では未定)にチャレンジしたいと考えています。

今後とも、宜しくお願い致します。

〜Objective-C→Swiftコンバートツールについて〜

■背景

ハンズラボでは、iOSアプリの開発には、Swiftを使うという、じばにゃんからの指示があります。

しかし、今回案件で利用するカードリーダーのSDKの組み込みサンプルは、Objective-Cでの提供しかなく、Objective-Cのコードを目で見て、手動でSwift化するのは、時間的に厳しいと感じました。

そこで、Objective-Cで必要な部分を作ってからコンバートツールを使ってSwift化しました。

今回は、「objc2swift」と云うYahoo!様が開発したツールを使いましたのでそちらをご紹介をします。

■「objc2swift」利用手順

0.前提

事前に以下のモジュールのインストールをしておいてください。
・JDK(ツールはJDKが無いと動きません。)
また、以下の環境の例になります。
Mac OSX(10.11.2)

1.Gradle(SDKMAN!)のインストール

GradleをMacにインストールする際に、Groovy関連のプロダクトのバージョン管理を行うツール(SDKMAN!)を使って Gradleをインストールするのが一般的なやり方みたいです。

最初に、SDKMAN!をインストールします。

「sdk help」でhelpが表示されたらSDKMAN!のインストール完了です。

次に、Gradleのインストールをしてみます。

「gradle -v」でバージョンが表示されたら「gradle」のインストール完了です。

2.objc2swiftのビルド

■使ってみた感想

・300Stepくらいのプログラムで50箇所程度、コンバート時にエラーがありました。
・統計を取った訳ではありませんが、オプショナル型に関してのエラーが多かった様に思えます。
・同じ様なエラーが多く、まとめて修正できたので、1〜2時間くらいで疎通確認まで完了しました。
(ちなみに私はSwiftを始めたばかりですので、Swiftに慣れた方ならもっと早いと思います。)

この記事を読んで、Objective-Cの辛みから皆さまが開放されるきっかけになれば幸いです。


東急ハンズのiPad POSでRealmを使ってみた


この記事は、Realm Advent Calendar 2015の22日目の記事です。

ハンズラボの黒岩です。

エンジニアブログに書くのが初めてなので軽く自己紹介させてください。
iOSアプリ開発・MDMを使った運用を主に担当しており、現在は東急ハンズの内製でiPad POSレジを開発しています。
(まだ、数店舗での導入しておらず、東急ハンズ・ハンズビー・ピカロ全店のレジを順次iPadに置き換える予定)

東急ハンズのPOSでは、多くの場面でRealmを使っています。

どの場面で利用しているか

  • 商品マスタ
  • 金券マスタ
  • 値引に関するマスタ
  • 取引情報
  • 支払情報
    などの保存に利用。

Realm採用に至った理由

  • パフォーマンスの良さ
  • アップデートが頻繁に行われており、将来性がある
  • 学習コストが少なく書き込み読み込みならすぐに理解が出来る
  • 自動マイグレーションでとても楽

毎朝90万件のデータをアップデート

商品、金券など、毎朝最新マスタのダウンロードします。
商品マスタだけで90万件分のデータがあり、JSONデータをダウンロード・マッピングした後、Realmに書き込みます。
ダウンロード・マッピング・書き込み処理合わせても15分ほどで終わり、Realmの書き込み速度の速さが素晴らしい。(近い将来、全件更新ではなく、差分更新にする予定)
現状、Realmが起因でのクラッシュ等の問題も見られず、順調に運用出来ています。

マスタ取り込み・Realmへの書き込み

お金を扱う処理は、 NSDecimalNumber で扱って計算を行いますが、
NSDecimalNumber のままRealmに保存できないため、下記のように数値をStringに変換して保存します。

1度に1万件ずつJSONデータを ObjectMapper でObjectにマッピングを行い、RealmObject に変換して書き込みます。

関連・オプショナル

取引に支払、複数の取引明細をもつなど、関連で簡潔に定義できる。
必要な場合のみセットするものはオプショナルで持つなどして対応できる。

マイグレーションが楽

Realm最新バージョンでは、例えフィールドがいくつ増えようとも増えても自動でマイグレーションが行われるため、
schemaVersionをインクリメントするだけの修正で済みます。

マッピングが辛かった

ObjectMapperのマッピングの抜け漏れがあって、Realmに保存されないフィールドが多々あった。
やはり手メンテ・目視でもメンテは辛い。

おわりに

軽く上辺だけ話になり、Realmの概要みたいになりましたが、
使い勝手がよくパフォーマンスの良いのでぜひ使ってみてください。


AWS Summit Tokyo 2015 DevConで話してきました!


今井です。

6月2日、3日に開催されたAWS Summit Tokyo 2015の開発者向けカンファレンスの方で、 iOSとAWSを利用したPOSについて話してきました。

以下は、その際のスライドです。

カンファレンスの後のJAWS-UGでやっていたAWSウルトラクイズで三位になりました!
景品でクラウドデザインパターン 設計ガイド 改訂版をいただきました!(ヤマンさんにサインもらい忘れた)
これを読んで次回は一位を取れるようにがんばります!

なお、ハンズラボでは、AWSエンジニアとiOSエンジニアを募集しております。
一緒に2-Tierアーキテクチャなアプリケーションを構築したい、という方はぜひこちらから応募ください!!!

AWSのフルマネージドで、アプリ構築するエンジニアWanted!