Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

今更Objective-Cでバリデーションライブラリを作った話

お久しぶりです。iOSエンジニアのかっくん(@fromkk)です。
入社後コーポレートサイトをリニューアルした後は弊社の2大アプリの内の一つ Famm のリニューアルプロジェクトにアサインされました。
この度色々有りましたが無事にリリースされましたので、中で利用しているバリデーションライブラリを自作してCocoapodsに登録したので紹介します。

TMValidator

インストール方法

※前提条件

  • iOSアプリのプロジェクトをObjective-Cで作成されている事
  • CocoaPodsMacにインストールされている事

インストール方法は Podfilepod 'TMValidator'を記述して、ターミナルからpod installを実行します。
プロジェクトのフォルダにプロジェクト名.xcodeprojのファイルの他にプロジェクト名.xcworkspaceというファイルが出来ているかと思いますのでこちらを開いて下さい。

バリデーターを利用したいファイルの上部に #import <TMValidator/TMValidator.h> を入力します。
これで準備完了です。一度ビルドしてみて正しくビルドが通る事を確認して下さい。

基本的な使い方

まずは TMValidatorインスタンスを作成します。

TMValidator *validator = [TMValidator validator];

次に TMValidatorField を作成します。

TMValidatorField *emailField = [TMValidatorField fieldWithValue:nil andLabel:@"メールアドレス" andElement:nil];
TMValidatorField *passwordField = [TMValidatorField fieldWithValue:nil andLabel:@"パスワード" andElement:nil];

そして TMValidatorFieldTMValidatorRule を追加します。

[emailField addRules:@[
  [TMValidatorRuleRequired ruleWithErrorMessage:@"メールアドレスは必須入力です"],
  [TMValidatorRuleEmail ruleWithErrorMessage:@"メールアドレスの形式で入力して下さい"],
  [TMValidatorRuleMaxLength ruleWithLength:@255 andErrorMessage:@"メールアドレスは255文字以内で入力して下さい"]
]];
[passwordField addRules:@[
  [TMValidatorRuleRequired ruleWithErrorMessage:@"パスワードは必須入力です"],
  [TMValidatorRuleIsAlnum  ruleWithErrorMessage:@"パスワードは半角英数字で入力して下さい"],
  [TMValidatorRuleMinLength ruleWithLength:@6 andErrorMessage:@"パスワードは6文字以上で入力して下さい"],
  [TMValidatorRuleMaxLength ruleWithLength:@16 andErrorMessage:@"パスワードは16文字以内で入力して下さい"]
]];

最後に TMValidatorTMValidatorField を追加します。

[validator addFields:@[emailField, passwordField]];

これで準備完了です。
バリデーションを実行したい時にテキストフィールドなどの textTMValidatorFieldvalue に渡して TMValidatorrun を実行します。

emailField.value = emailTextField.text;
passwordField.value = passwordTextField.text;

if ([validator run])
{
    //validate OK!!!
} else
{
    //validate failed...
    NSArray *errors = validator.errors;
    NSLog(@"errors %@;", errors);
}

更に TMValidatorField を保持している TMValidateTextFieldTMValidateTextView も用意していますので、わざわざテキストフィールドと TMValidatorField を分離したくないという人はそちらの利用をオススメします。


Fammでは今回、メールアドレスでの新規登録やログイン、プロフィール情報の編集画面等で TMValidator を利用しています。

f:id:timers-tech:20160311121833g:plain

是非ダウンロードして触ってみて頂ければと思います!
今後の展望としては、サーバー側のバリデーションにJSONスキーマを採用しているので、iOS側でもJSONスキーマが利用出来る様になればいいなと思っています。
他にも要望があれば弊社にお問い合わせ下さい。
バグを見つけた場合 Pull Request をお待ちしています。


子育て家族アプリFammカップル専用アプリPairyを運営する Timers inc. では、現在エンジニアを積極採用中!急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください!
採用HP : http://timers-inc.com/engineerings

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる