Quantcast
Channel: その後のその後
Viewing all 317 articles
Browse latest View live

[ライブラリ][iOS][Objective-C]UILabelでのテキスト表示をリッチにする

$
0
0

UILabelはiOSアプリ開発において使用頻度の高いUIコンポーネントですが、カユいところに手が届かなかったりします。例えばテキストの一部だけ強調表示したい、色を変えたい、フォントを変えたいといったHTMLのような使い方ができません。


iOS6以上であれば、attributedText というNSAttributedStringオブジェクトをセットできるプロパティを標準で持っているので、そのままでテキストの装飾が可能なのですが、残念ながらiOS5以下では使えません。


OHAttributedLabelとTTTAttributedLabelは、そんなUILabelの機能を拡張するOSSです。


OHAttributedLabel

特長

NSAttributedString をラップして UILabel に持たせたもので、テキストの一部だけフォントや色を変えたり、リンクの付与といった指定が簡単にできるようになります。



また、 iOS6のテキスト装飾の手順と同じ(NSMutableAttributedString オブジェクトを作成して attributedText プロパティにセットする)で、シンプルでわかりやすいAPIも特長です。


使用準備

1. ソースコードをダウンロード

https://github.com/AliSoftware/OHAttributedLabel


2. クラスファイル一式をプロジェクトに追加

OHAttributedLabelフォルダ配下にあるクラスファイルをすべてプロジェクトに追加します。必要最小限のファイルのみ追加したい場合は

CoreTextUtils, NSTextCheckingResult+ExtendedURL, OHParagraphStyle, NSAttributedString+Attributes, OHAttributedLabelの5つを追加します。


3. CoreText.framework をプロジェクトに追加


4. ヘッダをインポート

#import "OHAttributedLabel.h"

基本的な使用方法

指定範囲の文字色を変更する方法を例にとり、OHAttributedLabelの基本的な使い方の流れを説明します。


1. NSMutableAttributedStringオブジェクトを生成


引数には表示する文字列を渡します。

NSString *txt = @"表示する文字列";
NSMutableAttributedString *attrStr = [NSMutableAttributedString attributedStringWithString:txt];

2. 文字色と範囲を指定


setTextColor:range: メソッドで、変更する文字色と、変更する範囲を指定します。

NSRange range = [txt rangeOfString:@"文字"];
UIColor *color = [UIColor colorWithRed:0.f green:0.f blue:0.f alpha:1.f];
[attrStr setTextColor:color range:range];

3. attributedTextプロパティにセット


OHAttributedLabel オブジェクトの attributedText プロパティに NSMutableAttributedString オブジェクトをセットして適用完了です。

self.ohLabel.attributedText = attrStr;

ちなみに、setTextColor:range: の代わりに range 引数のない setTextColor: メソッドを用いると、文字列全体に適用されます。

[attrStr setFont:[UIFont fontWithName:@"Helvetica" size:16]];
[attrStr setTextColor:[UIColor grayColor]];

その他の使用方法

太字指定は setTextBold:range: メソッドで YES をセットするか、

[attrStr setTextBold:YES range:range];

ボールドフォントの UIFont オブジェクトを setFont:range: メソッドに渡します。

UIFont *boldFont = [UIFont boldSystemFontOfSize:18];
[attrStr setFont:boldFont range:strongRange];

リンクを貼る場合は、setLink:range: メソッドにURLと範囲を指定します。

NSRange linkRange = [txt rangeOfString:linkStr];
NSURL *linkUrl = [NSURL URLWithString:@"http://www.facebook.com/iOSDevTips"];
[attrStr setLink:linkUrl range:linkRange];

OHAttributedLabel のソースコードに付属しているサンプルプロジェクトには、デリゲートメソッドを実装してアラートを出したり、タップ済みのリンクの文字色を変えたりといったサンプルも入っています。


centerVertically プロパティに YES をセットすると中央揃え、NO で上寄せになります。

self.ohLabel.centerVertically = YES;

UILabel の textAlignment に指定できる値として、UITextAlignmentJustify が追加されています。これは

#define UITextAlignmentJustify ((UITextAlignment)kCTJustifiedTextAlignment)

このように CoreText で定義されているアライメントタイプである kCTJustifiedTextAlignment を UITextAlignment 型にキャストしたもので、これを指定するとパラグラフの末尾が自然に揃えられます

self.ohLabel.textAlignment = UITextAlignmentJustify;

TTTAttributedLabel

特長

OHAttributedLabel と同じく、NSAttributedString の機能を UILabel に持たせたものです。APIの手軽さでは OHAttributedLabel に軍配が上がりますが、機能の豊富さではこちらが勝ります。



使用準備

1. ソースコードをダウンロード

https://github.com/mattt/TTTAttributedLabel


2. CoreText.framework をプロジェクトに追加


3. TTTAttributedLabel.h をインポート

#import "TTTAttributedLabel.h"

使い方

OHAttributedLabel と使用方法の比較ができるよう、テキストの一部を赤字・太字にする方法、リンクを貼る方法を紹介します。


文字色、太字等の属性の指定は、setText:afterInheritingLabelAttributesAndConfiguringWithBlock: メソッドのブロック内で行います。

[self.tttLabel setText:txt afterInheritingLabelAttributesAndConfiguringWithBlock:
 ^NSMutableAttributedString *(NSMutableAttributedString *attrStr) {
     
     // ベースの設定
     [attrStr setFont:baseFont];
     [attrStr setTextColor:[UIColor grayColor]];

     // 文字色
     [attrStr setTextColor:strongColor range:strongRange];

     // Bold
     [attrStr setFont:boldFont range:strongRange];

     return attrStr;
 }];

リンク

リンクの指定は addLinkToURL:withRange: メソッドをコールします。

[self.tttLabel addLinkToURL:linkUrl withRange:linkRange];

また、TTTAttributedLabelでは、リンクをタップされたときの処理用の delegate メソッドを実装する必要があります。


そのため、プロトコルへの準拠を宣言しておき、

<TTTAttributedLabelDelegate>

TTTAttributedLabelのdelegateプロパティに移譲先をセットします。

self.tttLabel.delegate = self;

attributedLabel:didSelectLinkWithURL: メソッドを実装します。

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
    
    [[UIApplication sharedApplication] openURL:self.linkUrl];
}

OHAttributedLabel はここはラップしてくれているのでひと手間増えることになりますが、openURL: ですぐに Safari や iTunes に飛ばすのではなく、一旦確認を挟みたい場合には便利です。(ただし、OHAttributedLabel もデリゲートメソッドの attributedLabel:shouldFollowLink: を実装すれば同等のことができます。)


サンプルコード

OHAttributedLabel と TTTAttributedLabel ともにサンプルプロジェクトがそれぞれのリポジトリに付属していますが、両者のAPIの違いを比較しやすいよう、両OSSを使用したサンプルアプリをGithubにアップしてあります。


[LabelDemo](https://github.com/shu223/LabelDemo)



参考

iOSオープンソースライブラリ徹底活用
菊田 剛
秀和システム
売り上げランキング: 31,537

[UILabelでのテキスト表示をリッチにする機能拡張サブクラス3種](http://gihyo.jp/dev/serial/01/ios_oss/0004?ard=1363646129)




[iOS6][iOS][Objective-C]UILabel, UITextView, UITextFieldのテキストを NSAttributedString で装飾する

$
0
0

iOS6から、UILabel, UITextView, UITextFieldに、 attributedText というNSAttributedString型のプロパティが追加されました。NSAttributedStringは文字列の属性を管理するクラスで、これを使用するとフォントや文字色、背景色、カーニング等の属性をテキスト内の指定範囲に対して適用することができるようになります。



基本的な実装手順

基本的な手順は次の通りです。


1. NSMutableAttributedStringオブジェクトを生成


initWithString: メソッドでオブジェクトを生成します。

NSString *str = @"NSAttributedString Sample";
NSMutableAttributedString *attrStr;
attrStr = [[NSMutableAttributedString alloc] initWithString:str];

引数には対象となる文字列を渡します。


2. 属性をセット


addAttribute:value:range: メソッドを用いて属性、値、適用範囲をセットします。

// フォント
[attrStr addAttribute:NSFontAttributeName
                value:[UIFont fontWithName:@"Futura-CondensedMedium" size:17.]
                range:NSMakeRange(0, [attrStr length])];

// 背景色
[attrStr addAttribute:NSBackgroundColorAttributeName
                value:[UIColor colorWithRed:1. green:1. blue:.0 alpha:1.]
                range:NSMakeRange(0, [attrStr length])];

// 打ち消し線
[attrStr addAttribute:NSStrikethroughStyleAttributeName
                value:[NSNumber numberWithInt:3]
                range:[str rangeOfString:@"Sample"]];

3. UILabelにセット


UILabelの attributedText プロパティに、作成したNSMutableAttributedStringオブジェクトをセットします。

[self.label setAttributedText:attrStr];

なお、サンプルではUILabelを用いていますが、UITextViewもUITextFieldもiOS6以上では同様の方法(attributedTextプロパティを使う)でテキストに装飾することができます。



属性と値について

上で載せたサンプルで addAttribute:value:range: メソッドに渡している属性は、それぞれ次のような効果があります。

  • NSFontAttributeName :フォントを指定する
  • NSBackgroundColorAttributeName :背景色を指定する
  • NSStrikethroughStyleAttributeName :打ち消し線を指定する

そして、属性毎に引数valueに指定できる値の型は違ってきます。たとえば、属性 NSFontAttributeName に対して値はUIFontオブジェクトを渡しますが、属性 NSBackgroundColorAttributeName に対しては値としてUIColorオブジェクトを渡します。

属性毎に指定できる値の詳細は、


NSAttributedString UIKit Additions Reference


で確認することができます。


影と文字色

文字色を指定する場合は NSForegroundColorAttributeName を使用します。値は NSBackgroundColorAttributeName と同様にUIColorオブジェクトを渡します。


また影をつける場合は NSShadowAttributeName を使用します。値にはNSShadowオブジェクトを渡します。

// NSShadowオブジェクト
NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowColor:[UIColor colorWithRed:0. green:0. blue:0. alpha:1.]];
[shadow setShadowBlurRadius:4.0];
[shadow setShadowOffset:CGSizeMake(2, 2)];

// 影
[attrStr addAttribute:NSShadowAttributeName
                value:shadow
                range:NSMakeRange(0, [attrStr length])];

// 文字色
[attrStr addAttribute:NSForegroundColorAttributeName
                value:[UIColor colorWithRed:1. green:1. blue:0. alpha:1.]
                range:NSMakeRange(0, [attrStr length])];


中抜き文字、下線、カーニング

NSStrokeWidthAttributeName を使用すると、中抜き文字にすることができます。値には線幅を指定します。中抜き文字の枠線の色を指定する場合は、 NSStrokeColorAttributeName を使用します。


下線を引く場合は、 NSUnderlineStyleAttributeName を使用します。値には整数のNSNumberオブジェクトを指定します。(ここでは定数 NSUnderlineStyleSingle を使用しています。)


カーニングは NSKernAttributeName を使用します。値には浮動小数点数のNSNumberオブジェクトを指定します。

// 中抜き文字の線幅
[attrStr addAttribute:NSStrokeWidthAttributeName
                value:@5
                range:NSMakeRange(0, [attrStr length])];

// 中抜き文字の枠線の色、下線、カーニングを一度に指定
NSDictionary *attributes = @{NSStrokeColorAttributeName: [UIColor magentaColor],
                             NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),
                             NSKernAttributeName: @1.5};

[attrStr addAttributes:attributes
                 range:[str rangeOfString:@"Sample"]];

また上記では addAttributes:range: メソッドを使用して複数の属性と値を一度に指定しています。同じ範囲に対して適用する場合等に便利です。



パラグラフスタイル

NSParagraphStyleAttributeName を使用すると、パラグラフスタイル(NSParagraphStyleオブジェクト)を指定することができます。NSParagraphStyleはアライメントやハイフネーションを指定するためのプロパティを持っています。

// NSMutableParagraphStyleオブジェクト
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];

// アラインメント
paragraph.alignment = NSTextAlignmentRight;

// ハイフネーション
paragraph.hyphenationFactor = 0.9;

// パラグラフスタイル
[attrStr addAttribute:NSParagraphStyleAttributeName
                value:paragraph
                range:NSMakeRange(0, [attrStr length])];

hyphenationFactor には0.0〜1.0の値を指定することができ、0.0でハイフネーション(行末で切れる単語をハイフンで繋ぐ)なし、1.0で常にハイフネーションを試みる設定となります。



NSAttributedStringを使用可能なUIKitのクラス

UILabel, UITextView, UITextFieldの、 attributedText プロパティ以外にも、NSAttributedStringをセットできるプロパティ/メソッドがいくつかのUIKitのクラスに追加されています。


※いずれも要iOS6以上


UIButton

- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state

UIPickerView

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView
             attributedTitleForRow:(NSInteger)row
                      forComponent:(NSInteger)component

UIRefreshControl

@property (nonatomic, retain) NSAttributedString *attributedTitle

UITextField

@property(nonatomic,copy) NSAttributedString *attributedPlaceholder


静的アナライザによる解析を特定のファイルで無効にする

$
0
0

Xcodeのビルド設定で "Run Static Analyzer" を有効にしていると、ビルド時に静的アナライザが走ってコードの怪しい箇所を指摘してくれます。非常に助かりますが、サードパーティ製ライブラリを使用していてコードに手を入れたくないクラスや、既に問題がないことを確認済みの箇所等、静的解析が不要な場合もあります。



次の方法で、ファイル毎に静的アナライザを無効にする(そのファイルについてのwarningが出ないようにする)ことができます。

1. プロジェクト設定画面のBuild Phasesタブを開く

2. 静的解析を無効にしたいファイルを選択してリターンキー押下

3. コンパイラフラグを追加

"-Xanalyzer -analyzer-disable-checker" というコンパイラフラグを追加します。



複数ファイルを一括で無効にしたい場合は、まとめて選択した状態でリターンキーを押してコンパイラフラグを編集します。


参考



[iOS][Objective-C]Twitterの全ツイートアーカイブを閲覧するiOSアプリを公開しました

$
0
0

今日付けで、日本ユーザーもTwitterの過去の全ツイートをダウンロードできるようになったようです。


Twitter、「全ツイート履歴」をダウンロードできる機能、日本でも提供開始


で、けっこう自分の過去のツイートを見るのが楽しくて、専用ビューアアプリでちまちま見返したいなぁと思い、つくりました。


f:id:shu223:20130322225611p:image:w600


Githubにアップしてあるので、tweetsフォルダを入れ替えさえすれば、自分専用全履歴ビューアのできあがりです。


shu223/TwitterArchiveViewer


iPhone/iPad両対応のユニバーサルアプリとなっております。(というかiPadじゃないと見づらいです。これってどうにかするとスマホ用表示になるんでしょうか?)


使い方

1. 自分の全ツイートアーカイブをダウンロードしてくる

手順はこちら。(手順といっても、設定に追加された「全ツイート履歴をリクエストする」ボタンを押すだけです。)


2. 既存のtweetsフォルダを削除する


f:id:shu223:20130322231850p:image:w260


3. 自分のtweetsフォルダを追加

ダウンロードした tweets.zip を解凍すると出てくるtweetsフォルダごと、プロジェクトに追加します。


Foldersのラジオボタンで "Create folder references for any added folders" を選択してください。(重要!!!!)


f:id:shu223:20130322232252p:image:w520


4. ビルドして実機にインストール


実装の中身

ご想像の通り、UIWebViewで表示しているだけです。


ライセンス

MITです。


iTunesとのドキュメント共有機能をつけて、zipごと放り込んでDocumentsフォルダに解凍するようにすれば、(一般ユーザも使えるので)ストアで売れるかもしれません。。



[Tips][iOS][Objective-C][Xcode][ライブラリ]評判のいいiOSアプリ開発のTips ベスト20

$
0
0

iOSアプリ開発に役立つTips』という Facebook ページをやっておりまして、そこで評判が良かった投稿(※)を 20 個ほど紹介します。


(※) Facebook ページの insights にある「クチコミ度」で判断しました

アプリ実行中にコードを修正してそのまま実行中のアプリに反映させる

アプリ実行中にコードを修正してそのまま実行中のアプリに反映させることができるXcodeプラグイン。


実機でもシミュレータでも使用可能とのこと。実機での動作検証中に修正して再インストールは時間かかるので、超ありがたいかも。


Injection for Xcode


「PCのwebブラウザからiPhoneのカメラロールにアクセスできるようにするアプリ」のしくみ

アプリ側でURLを発行している画面キャプチャがあるので、アプリにHTTPサーバ機能をもたせて(古いけどCocoaHttpServerとか)、アプリ側でカメラロールにアクセスしてその情報をweb経由で見せる、というしくみでしょうか。



新作!iPhoneのカメラロールをブラウザからアクセス出来るようにするアプリ「AirLib」を公開します | 関西/大阪のiPhone・iPadアプリ開発 feedtailor Inc. 社長ブログ


イラレで書いたパスデータを、UIBezierPathのコードに変換してくれるイラレ拡張

イラレで書いたパスデータを、UIBezierPathのコードに変換してくれるイラレの拡張。


UIBezierPath でコードだけでいい感じの図形とか画像を描くのは無理があるので、これは便利かも。


Drawscript - convert Illustrator shapes into code


「アプリを操作中の写真」を自動生成してくれるサービス

スクリーンショットの画像をアップすると、ハメコミ合成で「アプリを操作中の写真」を自動生成してくれるサイト。


ちょっと手元のスクリーンショットでやってみましたがなかなかいい感じの仕上がりでした。


PlaceIt by Breezi - Generate Product Screenshots in Realistic Environments


コマンドラインからJSONをごにょごにょする

特にiOSアプリ開発に限った話ではないのですが、jqという、「コマンドラインからJSONをごにょごにょできる」コマンドがかなり便利そうです。


たとえば、ルート直下の要素だけを取り出したい場合は、

$ jq ".[0]" hoge.json

"entities"要素内の"hashtags"要素内の"text"という要素を取り出したい場合は

$ jq ".[].entities.hashtags[].text" hoge.json

みたいな感じで簡単にとれて、はじめて使うAPIのレスポンスの構造を調べるときとかに活躍しそうです。


jqコマンドが実は高性能すぎてビビッた話


NSNumberFormatterで英語の勉強

NSNumberFormatterのいろいろなサンプル。3桁ごとにカンマ区切りにする「以外」のサンプルってあまり見つからないので参考になりました。


とくに、NSNumberFormatterSpellOutStyle がおもしろくて、たとえば、

[formatter setNumberStyle:NSNumberFormatterSpellOutStyle];
NSString *formattedOutput = [formatter stringFromNumber:@129];

こうやると、

one hundred twenty-nine

って出力してくれます。


これで英語の勉強アプリつくれそうです。


Formatting Numbers – NSNumberFormatter Examples


iPhoneの設定から通信速度を制限する

久しぶりに設定の「デベロッパ」のとこ見てみたら、この通信速度以外にも、iAdのテスト用設定とかも追加されてました。



iPhone5実機(iOS6.0.2)で通信速度を制限する #iOS #iPhone - Qiita


『Core Animation Programming Guide』大幅改定

『Core Animation Programming Guide』が大幅改定されたもよう。前回の更新から実に2年4ヶ月ぶり。『Animation Types and Timing Programming Guide』の内容もこっちに組み込んだとのこと。


Core Animation Programming Guide


CAEmitterLayer, CAEmitterCellを使ったパーティクルエフェクトの実装方法

iOS5からCore Animationに追加された、CAEmitterLayer, CAEmitterCellを使ったパーティクルエフェクトの実装方法について書きました。


UIKit上でパーティクルエフェクトを表示する - Over&Out その後


コマンドラインから.ipaをつくる

コマンドラインから.ipaをつくると"make adhoc"だけでできて楽ですよ、という話。


最初だけMakefileをつくるひと手間が必要ですが、curlコマンドも書いておけばビルド完了後に自動でtestflightにアップもできる、というのは便利そうと思いました。


.ipaをサッとつくる - blog.ishkawa.org


(派生記事)

.ipa ファイル生成を自動化する


バッテリーの超詳細情報を取得する

これを実機で実行すると、バッテリーの相当細かい情報まで取得できます。電圧までとれる。


ここまでとれるのか〜、とソースの中身みてみると、もろにプライベートAPI使ってました。。OSDBatteryっていうクラスがあるようです。


BatteryInfo


自然言語のテキストを属性で区分

NSLinguisticTaggerについて書きました。


自然言語のテキストを品詞(名詞、動詞、代名詞)や「個人名」「地名」といった属性で区分することができます。あと、日本語の形態素解析も可能です。



自然言語のテキストを属性で区分する - Over&Out その後


Auto Layoutの詳説スライド

70ページにわたるAuto Layoutの解説スライド(日本語)


Auto Layoutの基礎知識から、IBでの設定方法、ソースでの設定方法などなど。



iOS6 Auto Layout


画像を使用せずアイコンを描画

FacebookとかTwitterアイコンのUIButtonを描画してくれるOSS。


UIBezierPathでパス描画してUIImageを生成してるので画像ファイル不使用。与えたサイズに対して相対位置で描画するように実装してあるので大きさも自在。


GRButtons


MacのキーボードからiPhoneに文字入力

MacのキーボードからiPhoneとかiPadの文字入力できるようになります。今設定してみたばかりだけど超便利な予感。



MacをWinodwsのキーボードにできるアプリ、1Keyboardが理想的すぎて感動した


ファイルテンプレートの詳細な解説ページ

Xcode4の、ファイルテンプレートまわりの詳細な解説ページ。


TemplateInfo.plistの各要素の説明とか、"___FILEBASENAMEASIDENTIFIER___"とかのテンプレート関連マクロが何に展開されるか等、とにかく徹底解説な感じです。


このあたりはAppleの正式なドキュメントがないので、レア情報かと。



Creating Custom Xcode 4 File Templates


画面の解像度種別を返してくれるカテゴリ

iPhone5の画面サイズ対応についての質問と回答。回答2つめあたりの、UIDevice+Resolutionsっていうenumで定義した画面の解像度種別を返してくれるカテゴリはつくっとくと便利そう。



iOS 6 apps - how to deal with iPhone 5 screen size? - Stack Overflow


AppStoreのレビューをスクレイピングしてDBに保存

AppStoreのレビューをスクレイピングしてDBに保存したり表示したりするツール。


保存したレビューの一覧表示だけじゃなく、★の数を集計してグラフ表示したり、頻出キーワードを抽出したりもできるとのこと。


AppReviewViewer


iOSアプリ開発の細かい仕事で小遣い稼ぎ

仕事をアウトソースできるwebサービス。Skill RequiredをiPhoneに絞ると結構iOSアプリ開発まわりの仕事もでてきます。


アプリまるっと作ってくれ系は安すぎるものが目立ちますが、リンク先はGPUImageの調整をしてほしいというもので、こういう細かい仕事は小遣い稼ぎにはいいかもしれません。(この案件は既にclose)



GPUImage adjustment | iPad | iPhone


ビューにスポットライトをあてる

スポットライトのように、中心をピークに、放射状に徐々に暗くするOSS。addSpotlightInView:atPoint: っていう感じでスポットライトをあてるビューと位置を指定するだけなので直観的。


ソースを見たところ、内部実装としては、CoreGraphics の CGGradientRef を使用して実装している。ちゃんとadd/removeのときにふわっとするアニメーションも実装してある。



MLPSpotlight for iOS - Cocoa Controls


おわりに

今回20個ほどピックアップしましたが、日々ちまちまと投稿しているので、Facebookページの方にはこの10倍ぐらいはTipsがたまってると思われます。


「いいね!」しておくとTipsがタイムラインに流れるようになるので、よろしければどうぞ!


iOSアプリ開発に役立つTips

http://www.facebook.com/iOSDevTips



[海外就職]1週間の短期語学留学に行ってきました

$
0
0

(2013年5月12日追記:こちらの記事は未完成です。完全版はこちらにあります)


今月か来月から、アメリカで働くことになった*1ので、1週間の短期語学留学に行ってきました。


思えば15年前にはじめて海外旅行をして以来、海外に行くたびに「英語を話せるようになりたい!」と一念発起しては何かに手をつけ、そして飽きる、というありがちなパターンを繰り返してきて、もはやどんな勉強も挫折が先に見えてしまって手をつけることすらできないという状態でした。


で、もう最後の手段は「英語を話す以外の選択肢がない」という状況に身を置ける語学留学しかないなーと。


そんなこんなで実際に行ってみて自分的にはかなり良かったので、以下に諸々をまとめたいと思います。


※いままさに帰宅の途中で、成田エクスプレス内で書いてるので、未完の部分が多々あります。


行ったところ

行った学校は、フィリピンのセブ島にある、IDEA CEBU というところです。


http://philippine-r.com/cms/ideacebu01/


セブのこのへんにあります。



全寮制で、部屋にはシャワーとトイレがついてて、冷蔵庫があって、エアコンがあって、机まであります。シャワーはバリバリ水圧あって、アツアツのお湯が出ます。僕はシングルで入りましたが、ドミトリーもあります。


IDEA CEBUに決めたいきさつ

本の執筆の仕事がずっと押していて、次のアメリカでの働き先からも早く来てほしいといわれていて、語学留学に行く時間はなさそうなムードが濃厚だったのですが、ある日、翌日から5日ほどスケジュールに空きが出ることが急遽わかり、すぐさま


「明日から語学留学に行きたいんですけど!」


と『語学留学』でググって出てくるところに何件か電話してみたものの、


「遅くとも1ヶ月前には言ってもらわないと・・・」


とか、2週間以上前じゃないと受け付けられないとか、もう全然だめな感じでした。


そういうもんなのか。。といったん諦めつつ、ダメ元でセブ島になぜか住んでいる元同僚に「明日から語学留学に行きたいんだけど」メッセージを送ってみたところ、頼もしいことに、直接経営者の方に聞いてくれるとのお返事。


そしてなんと翌日からでもいいよという話になったのですが、結局、やりとりしてるうちにもうその翌日になっていたので、いったん断念。


で、その1週間後ぐらいに執筆作業が少し前倒しで終わって時間ができたので、直接その経営者の方に連絡して申し込み、となりました。


というわけで、他の国や他の学校と比べたりとか、授業内容を吟味したりとかは全然してなくて、とにかく「緊急入学させてくれた」というのが決め手でした。


旅程

本の校正締め切りが5/2のAM10:00で、その日の夕方には日本を発つ、という強行スケジュールでした。

  • 5/2(木) 夕方に日本発
  • 5/3(金) 未明にセブに到着、寮で寝て、オリエンテーション、レベルチェック受けて、さっそく授業2コマ
  • 5/4(土) 追加授業4コマ
  • 5/5(日) 追加授業4コマ
  • 5/6〜8 授業6コマ+追加授業1コマ
  • 5/9(木) 授業2コマ+追加授業1コマ+卒業スピーチ
  • 5/10(金) 未明にセブ発、正午ぐらいに日本に到着

(追加授業については後ほど追記します)


時間割

こちらの「1日の授業構成」ってところをご参照ください。


http://philippine-r.com/cms/ideacebu01/


朝7時からボキャブラリーテストというのがあって、健康的でいい感じです。


学校の規則

現地で説明を受けてから知ったのですが、いろいろと細かく規則があって、それが自分としてはよかったです。たとえばアルコールは学院内には一切持ち込み禁止、空き瓶が見つかるだけでもだめ、とか、平日は門限が20時とか。


僕の場合は現地で遊びたいっていう気持ちは全然なくて、とにかく英語力をアップさせたかったので、勉強以外の選択肢(誘惑)を規則で制限してくれてありがたい、と思いました。


あと、規則じゃないですが、インターネットがロビー、休憩所といった共用スペースにあって、部屋で繋げられないのも地味に良かったです。


お値段

(のちほどまとめます)


ビフォーアフター

気になる効果ですが、大いにあったと思います。


初日は聞き取れないししゃべれないしで辛かったのですが、帰るころにはだいぶ慣れて、普通に先生と会話してました。


自分の会話をよくよく振り返ってみると聞き取れてなかったり言いたいことを言えてなかったりするのですが、あんまりそういうことを気にしなくなった、という感じです。


会話をすればするほど表現の引き出しが増えていく実感はあるので、あとは場数を踏むだけ。「場数を踏む際の壁となっていた恐怖心がとれた」というのが最大の収穫です。


期間について

1週間は語学留学としてはすごく短いと思うのですが、僕にはちょうどいい長さでした。


場数を踏む、という点では1ヶ月でも短いし、プログラマとしては1ヶ月とかそれ以上現場から離れると、結構遅れをとるなーという感覚があります(忘れる、腕がなまる、とかじゃなくてその間に世の中が進んでしまう)。


とりあえず恐怖心がとれたので、あとはもうアメリカに飛び込んで本職に没頭しつつ周りとコミュニケーションとって場数を踏めばいいかなと。


まとめ

(のちほどまとめます)


*1:この件はまた後日詳細を書きます

[海外就職]突発的に1週間の短期語学留学に行ってきたメモ・完全版

$
0
0

今月からアメリカで働くことになった*1ので、突発的に1週間の短期語学留学に行ってきました。


思えば15年前にはじめて海外旅行をして以来、海外に行くたびに「英語を話せるようになりたい!」と一念発起しては何かに手をつけ、そして飽きる、というありがちなパターンを繰り返してきて、もう最後の手段は「英語を話す以外の選択肢がない」という状況に身を置ける語学留学しかない!ということで、実際に行ってみて自分的にはかなり良かったので、以下に諸々をまとめたいと思います。


行ったところ

行った学校は、フィリピンのセブ島にある、IDEA CEBU というところです。


http://philippine-r.com/cms/ideacebu01/


セブのこのへんにあります。



どこにも遊びにいってないので、このあたりが中心部なのかどうなのか、全然わかりません。近くにでかいショッピングモールはあります。奇麗なビーチとかは(たぶん)近くはないです。


全寮制で、部屋はこんな感じです。


f:id:shu223:20130509222007j:image:w300


シャワーとトイレがついてて、冷蔵庫があって、エアコンがあって、机まであります。シャワーはバリバリ水圧あって、アツアツのお湯が出ます。僕はシングルで入りましたが、ドミトリーもあります。


IDEA CEBUに決めたいきさつ

本の執筆の仕事がずっと押していて、次のアメリカでの働き先からも早く来てほしいといわれていて、語学留学に行く時間はなさそうなムードが濃厚だったのですが、ある日、翌日から5日ほどスケジュールに空きが出ることが急遽わかり、すぐさま


「明日から語学留学に行きたいんですけど!」


と『語学留学』でググって出てくるところに何件か電話してみたものの、


「遅くとも1ヶ月前には言ってもらわないと・・・」


とか、2週間以上前じゃないと受け付けられないとか、もう全然だめな感じでした。


そういうもんなのか。。といったん諦めつつ、ダメ元でセブ島になぜか住んでいる元同僚に「明日から語学留学に行きたいんだけどなんとかならないか」的なメッセージを送ってみたところ、頼もしいことに、直接経営者の方に聞いてくれるとのお返事。


そしてなんと翌日からでもいいよという話になったのですが、結局、やりとりしてるうちにもうその翌日になっていたので、いったん断念。


で、その1週間後ぐらいに執筆作業が少し前倒しで終わって時間ができたので、直接その経営者の方に連絡して申し込み、となりました。


というわけで、他の国や他の学校と比べたりとか、授業内容を吟味したりとかは全然してなくて、とにかく「緊急入学させてくれた」というのが決め手でした。


旅程

本の校正締め切りが5/2のAM10:00で、その日の夕方には日本を発つ、という強行スケジュールでした。

  • 5/2(木) 夕方に日本発
  • 5/3(金) 未明にセブに到着、寮で寝て、オリエンテーション、レベルチェック受けて、さっそく授業2コマ
  • 5/4(土) 追加授業4コマ
  • 5/5(日) 追加授業4コマ
  • 5/6(月) 授業6コマ+追加授業1コマ
  • 5/7(火) 授業6コマ+追加授業1コマ
  • 5/8(水) 授業6コマ+追加授業1コマ
  • 5/9(木) 授業2コマ+追加授業1コマ+卒業スピーチ
  • 5/10(金) 未明にセブ発、正午ぐらいに日本に到着

1コマ=50分です。


もともと提示されてたスケジュールでは土日は授業休み、平日6コマ、というものだったのですが、どこか遊びに行くよりも英語をやりたかったので、追加料金を払って授業を増やしてもらいました。


時間割

こちらの「1日の授業構成」ってところをご参照ください。


http://philippine-r.com/cms/ideacebu01/


朝7時からボキャブラリーテストというのがあって、健康的でいい感じです。


学校の規則

現地で説明を受けてから知ったのですが、いろいろと細かく規則があって、それが自分としてはよかったです。たとえばアルコールは学院内には一切持ち込み禁止、空き瓶が見つかるだけでもだめ、とか、平日は門限が20時とか。


僕の場合は現地で遊びたいっていう気持ちは全然なくて、とにかく英語力をアップさせたかったので、勉強以外の選択肢(誘惑)を規則で制限してくれてありがたい、と思いました。


あと、規則じゃないですが、インターネットがロビー、休憩所といった共用スペースにあって、部屋で繋げられないのも、地味に良かったです(誘惑が少ないという意味で)。


お値段

  • 飛行機代:84,760円(燃油サーチャージとか諸々込み)
  • コース代:53,500円(授業料、滞在費、食費、洗濯、掃除とか諸々込み)
  • 追加授業料:約15000円(追加1コマあたり約1250円)

使ったお金はこんなところです。3食出るし、遊びに行く時間もなかったので、現地では全然お金を使わず。


ビフォーアフター

気になる効果ですが、大いにあったと思います。


初日は聞き取れないししゃべれないしで辛かったのですが、帰るころにはだいぶ慣れて、普通に先生と会話してました。


自分の会話をよくよく振り返ってみると聞き取れてなかったり言いたいことを言えてなかったりするのですが、あんまりそういうことを気にしなくなった、という感じです。


あとは場数を踏めば表現の引き出しを増やしていけるので、「場数を踏む際の壁となっていた恐怖心がとれた」というのは収穫としてでかいと思っています。


f:id:shu223:20130512170103j:image:w300

最終日は全生徒/先生の前で英語でスピーチ


期間について

1週間は語学留学としてはすごく短いと思うのですが、僕にはちょうどいい長さでした。


場数を踏む、という点では1ヶ月でも短いし、プログラマとしては1ヶ月とかそれ以上現場から離れると、結構遅れをとるなーという感覚があります(忘れる、腕がなまる、とかじゃなくてその間に世の中が進んでしまう)。


とりあえず恐怖心がとれたので、あとはもうアメリカに飛び込んで本職に没頭しつつ周りとコミュニケーションとって場数を踏めばいいかなと。


まとめ

そんなわけで、個人的には1週間の短期語学留学はオススメです。



*1:これを書いてる5/12日現在、実はもうアメリカに来てます。また後日詳細を書きます。

[iOS6][Objective-C]Social.framework を利用して Twitter の DM を送信する

$
0
0

Social.framework (と Accounts.framework)を利用して Twitter の DM を送信する手順です。


1. フレームワークをプロジェクトに追加

以下の2つを追加し、

  • Social.framework
  • Accounts.framework

DM送信を実装するクラスでヘッダをインポートしておきます。

#import <Social/Social.h>
#import <Accounts/Accounts.h>

2. Twitterアカウントのアクセス権を取得

Twitterアカウントのアクセス権を取得し、ACAccountオブジェクトを取得します。

ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *type = [store accountTypeWithAccountTypeIdentifier:
                              ACAccountTypeIdentifierTwitter];

[store requestAccessToAccountsWithType:type
                               options:nil
                            completion:^(BOOL granted, NSError *error) {
                                
                                if (!granted) {
                                    
                                    NSLog(@"not granted");
                                    
                                    return;
                                }
                                
                                NSArray *twitterAccounts = [store accountsWithAccountType:type];
                                
                                if (!(twitterAccounts > 0)) {
                                    
                                    NSLog(@"no twitter accounts");
                                    
                                    return;
                                }
                                
                                ACAccount *account = [twitterAccounts lastObject];
                            }];

3. DM 送信

SLRequestクラスを利用して、direct_messages/new APIをたたきます。

NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1.1/direct_messages/new.json"];
NSDictionary *parameters = @{@"text": @"テスト送信",
                             @"screen_name": @"shu223"};

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                        requestMethod:SLRequestMethodPOST
                                                  URL:url
                                           parameters:parameters];

request.account = account;
[request performRequestWithHandler:^(NSData *responseData,
                                     NSHTTPURLResponse *urlResponse,
                                     NSError *error)
 {
     NSError *jsonError = nil;
     id jsonData = [NSJSONSerialization JSONObjectWithData:responseData
                                               options:0
                                                 error:&jsonError];
     if (error){
         
         NSLog(@"error:%@", error);
     }
     
     if (jsonError) {
         
         NSLog(@"jsonerror:%@", jsonError);
     }
     
     dispatch_async(dispatch_get_main_queue(), ^{
         
         NSLog(@"jsondata:%@" , jsonData);
     });
 }];

上のコード内で使用しているパラメータについて補足すると、

  • text
    • 送信するテキスト
    • required
  • screen_name
    • 宛先ユーザーのscreen name(@のあとに続く名前)
    • option

となっています。


補足

iOS 6 より deprecated になりましたが、Twitter.framework の TWRequest を用いても同様のことができます。

TWRequest *request = [[TWRequest alloc] initWithURL:url
                                         parameters:parameters
                                      requestMethod:TWRequestMethodPOST];

参考資料

POST direct_messages/new | Twitter Developers



[海外就職]アメリカでのiOSアプリ開発の仕事にありつけました

$
0
0

以前、『34歳無職のiOSプログラマが1ヶ月間スペインに滞在してきたまとめ』という記事に書いた通り、海外就職したいため前職を辞めたものの、ビザもコネもないため、約5ヶ月間のニート生活*1を満喫しておりましたが、この度アメリカの企業に拾っていただくことになりましたので報告させていただきます。


5/12に日本を発ち、いまはシリコンバレーのマウンテンビューという場所で働いております。



ジョインした会社について

社名は AppSocially といいます。


メンバーは僕を入れて3人で、


  f:id:shu223:20130520003806p:image:w300

  (左から、CEO高橋、プログラマ松村、僕)


下記記事で紹介されているように、

500startups というシードアクセラレータ(?)のインキュベーションプログラム(?)「Bacth 6」に採択(?)されているスタートアップです。


?をいっぱいつけたとおり、僕自身、こういう米国スタートアップ事情はよくわかってないです。


よくわかってないですが、来てみて1週間でわかってないなりにわかったことは、「Bacth 6」には世界から30社ぐらいの有力スタートアップが採択されていて、そのファウンダー達が1フロアに集まって仕事していて、みんな熱くていい人たちで、ここで働くのはとても刺激的でおもしろい、ということです。


  f:id:shu223:20130516120210j:image:w300

  めでたいことがありみんなでシャンパンでお祝い(※昼の12時)


AppSociallyとのなれそめ

この記事』に書いたバルセロナ滞在中の、現地時間 AM4:00 ぐらいのこと。


PCに向かっていたら Facebook メッセージがポンと来ました。

『こんにちは、ご無沙汰してます、いつまでバルセロナいらっしゃるんですか?』

『現在お仕事って探されていますか?』

AppSociallyのメンバーのひとりからでした。(もともと面識はあったのですが、このときはまだAppSociallyについては知らなかったと思います。)


(僕)「フリーランスとしては、基本的には今はお請けしてなくて、(うんぬんかんぬん・略)」

受託開発の話かなー、と思い最初はお断りモード


『実は、モバイル向けの招待やシェアの機能を提供する会社を米国で立ち上げて、4月から4ヶ月ぐらい、米国のマウンテンビューで 500 startup というアクセラレータプログラムに入る予定でメンバーを探しているのですが、もし良かったら、お話聞いていただければと思い』

(僕)「おお、そういう話でしたか。ブログに書いてある通り、そもそも海外で働きたくて会社をとびだしたものの、ビザの壁にぶちあたってどうしよう、ってなってるので、


ぜひ詳しく伺いたいです。


スカイプでお話しすることも可能です。いかがでしょうか?」

一気に食いつく僕。



そんなこんなで、朝4時にスカイプでビデオ通話することになり、そこでスカイプ越しにCEOの高橋氏とも初めて会い、帰国後に鎌倉で飲み明かしたりしつつ、条件面をすり合わせてジョインに至った、というのが経緯です。


どういうところが決め手になったかというと、

  • アメリカに法人登記しているアメリカの会社であること
  • iOSアプリ開発の仕事であること
  • 給与などの条件も合致したこと
  • ビザの取得もサポートしてくれること

といったあたりです。


海外企業の面接で、英語面でもビザの面でも玉砕したことのある僕としては、これ以上ない好条件でした。


あと、メンバー全員がそれぞれの分野で実力があって、人間的にも信頼できるいい人たちだった、というのもあります。


やってる仕事

iOSまわりをやってるのですが、このへんはまだカオスなので、もうちょっといい感じになったら、また後日改めて書きたいと思います。


iOSアプリ開発の中でも、わりといままでスルーしてきたところのノウハウが求められることが多いので、日々精進しているところです。


  f:id:shu223:20130512105328j:image:w300

  空港からオフィスに直行して、そのまますぐに開発に入りました。

  そのときに撮った、オフィスの窓からの写真


オフィス

上述しましたが、たくさんの会社が1フロア(3つの部屋にわかれている)で作業しています。なのでまわりは外国人だらけです。(ただし人種はさまざま。英語ネイティブはどちらかというと少数派)


ほとんどがFounder/Co-Founderで、陽気で人懐っこく、(僕は英語がイマイチなので会話はあまりできないものの、)みんないつも声をかけてくれます。


  f:id:shu223:20130518215148j:image:w300

  ケーキを顔になすりつけあってキャッキャするのは世界共通


  f:id:shu223:20130517172849j:image:w300

  Batch 6のみんなでワリカンで卓球台を購入


毎日のようにオフィスに有名人とか成功した起業家や投資家が招かれて、講演とかワークショップが開催されています。


あと、ミネラルウォーター、コーヒー/紅茶、お菓子等は無料で、たまにピザが出てくる日もあります。


  f:id:shu223:20130517235629j:image:w300

  トイレに行く途中にフリーお菓子コーナーがあるので、確実に太れます


火・木はEAT CLUBという宅配サービスで好きなものを頼めます。(料金を500startupsが負担してくれてるらしい)


https://www.myeatclub.com/menu/


英語

メンバーは日本人だし、僕はプログラマーなので、生活/仕事に支障はないのですが、せっかくいろんな人がいるのにコミュニケーションをうまくとれないのがもどかしいです。


上述した講演とかワークショップは聞いても全然わからないし、会話してても相手がちょっと長めに話すと何言ってるかわからなくなります。相手がネイティブの場合だと、流暢すぎて短い一言とかでもわからないです。


リーディング > リスニング > ライティング > スピーキング(右に行くほど苦手)


と思っていましたが、こっちにきてみると、


リーディング > ライティング > スピーキング > リスニング


かもしれないと思えて来ました。


今の状況として、僕が英語でしゃべらないといけない機会はほとんどなく、英語の話を聞く機会は多いので、そう感じるのかもしれません。


生活

メンバー全員で共同生活をしています。玄関が1つ、ベッドルームが2つ、あとリビングとキッチンがあるので、2LDKというやつでしょうか。


  f:id:shu223:20130513091952j:image:w300

  リビング


  f:id:shu223:20130513092034j:image:w300

  キッチン


  f:id:shu223:20130519174729j:image:w300

  ベッドルーム


1,900ドル/月、会社が負担してくれてます。


僕はみんなより遅れて加わったのでアパート探しには参加していないのですが、craigslistという、掲示板みたいなところで探して、オーナーに連絡とって、契約したみたいです。


家具とかは車借りてIKEAで買って来たとのこと。


1枚目の写真にあるように、みんな自転車乗ってますが、僕は徒歩で通勤してます。


  f:id:shu223:20130513104002j:image:w300

  通勤路。ひたすらまっすぐ徒歩30分。


今後の展望

  • ビザの手続き
    • まだ何もやってない
  • アパートを探す
    • 日本のアパートを解約して奥さんを招聘する
  • もうちょっとアメリカを満喫する
    • 初めてアメリカにきて、空港からオフィスに直行して、それから毎日オフィスとアパートの往復しかしてない
  • 自転車を買う
    • 実はさっき買った。ブレーキついてなかったのでつけてもらってるところ。

諸々ありますが、何よりもまず、「これがAppSociallyです!」と自信を持って書けるところまでプロダクト(サービス)の完成度を上げたいです。


乞うご期待!


*1:というと仕事もしてただろ!というツッコミをいただくのですが、たまに日銭を稼ぐ仕事はしたもののフリーランスとしてやっていくつもりはなくあくまで求職中だったのでこういう表現をしております。

[iOS][Objective-C]『iOSアプリ開発 達人のレシピ100』という本を書きました

$
0
0

2013年に入ってから4ヶ月間、無職のありあまる時間をつぎ込み執筆してきた本が、ついに本日発売となりました。



バルセロナで観光もせず執筆し、その後は鎌倉のコワーキングスペースに毛布を持ち込み半泊まり込みで執筆し、企画当初は230ページの予定だったところを大幅超過して370ページも書いてしまったほどに気合いを込めました。


タイトルには『達人のレシピ』とありますが、もちろん著者が達人というわけではなく、掲載しているレシピが達人レベルの難しさ、というわけでもなく、私が提案した『iOSアプリ開発に役立つTips』という地味なタイトルに対していろいろな大人の方々の意向が加わってこうなった、というものです(カッコイイので大変満足しております)。


本の内容

ざっくり言うと、iOSアプリ開発まわりのTips集です。


概要紹介代わりに、『はじめに』に書いた内容を転載します。

iOS SDK がカバーしている領域は非常に広大で、これだけ開発者が増え、書籍やオープンソースが充実した今でも、具体的な実装方法の情報が見つからない機能や、あまり知られていない機能も少なくありません。


本書では、書籍やインターネットでよく見かけるような定番レシピではなく、

  • 利便性が高いわりにあまり知られていない/情報が少ない機能を使うレシピ
  • 現場の開発者のかゆいところに手が届くレシピ
  • 応用が利き、開発の幅が大きく広がるレシピ

といったレシピを100 個、カテゴライズして紹介しています。


どれも実際に現場でiOSアプリ開発をおこなう過程で培われた「生きた」レシピですので、入門を終え、実際にアプリを開発されている方には役立つレシピががきっと見つかると思います。


ぜひ目次をご一読ください。


というわけで、ぜひ目次を見ていただき、興味のある項目がありそうであればご購入いただけると嬉しいです!




レシピ一覧(目次)

※本記事ではカラーの元画像を使用していますが、書籍自体は1色刷り(モノクロ)です。

Chapter1 アニメーション/演出
  • 001 CATransform3D を用いて3D 表現をおこなう


  • 002 3Dアニメーション
  • 003 UIKit で物理演算エンジンを使用する


  • 004 UIKit 上でパーティクルエフェクトを表示する


  • 005 Core Image の遷移エフェクトを使う


  • 006 パスに沿ってアニメーションさせる
  • 007 グラデーションカラーをアニメーションさせる


  • 008 画面を揺らすエフェクト
  • 009 クロスディゾルブで画面遷移
  • 010 UIView のBlocksアニメーションをキャンセルする
  • 011 トゥイーンライブラリを使用する:PRTween
  • 012 トゥイーンライブラリを使用する:AHEasing


Chapter2 画像処理/色処理
  • 013 OpenCV for iOS を使う
  • 014 vImageで画像処理をおこなう
  • 015 シャッター音の鳴らないカメラアプリを実装する
  • 016 カメラにフォーカスと露出をタップで合わせる機能をつける
  • 017 Core Image の各フィルタのパラメータの詳細を調べる
  • 018 Core Imageでノイズ/チェッカーボード/ストライプ等のパターンを生成する


  • 019 トイカメラのようなトンネルエフェクト(ビネット効果)を写真に加える


  • 020 画像をポスタライズ(色数を減らす)する


  • 021 画像にモザイクをかける


  • 022 UIBezierPathでパスを描画する
  • 023 SVGファイルをUIBezierPath オブジェクトに変換する


  • 024 画像を多角形で切り抜く


  • 025 プログラムからスクリーンショットを撮影する
  • 026 画像の4 角を維持したまま拡大縮小する(9スライス)


  • 027 Core Graphics を用いてグラデーションを描画する


  • 028 UIColor の重ね合わせ/CSSカラー名での色指定をおこなう
  • 029 配色技法に基づいた色のセットを自動生成する


Chapter3 オーディオ処理
  • 030 OpenALで3D 空間に音源を配置する
  • 031 デバイスのボリュームボタンの操作を検出する
  • 032 ヘッドフォンジャックの抜き差しを検知する
  • 033 バイブを鳴らす
  • 034 システムボリュームに左右されない音量でシャッター音を鳴らす
  • 035 AVAudioRecordを用いてマイクに入力された音声を録音する
  • 036 AVCapture を用いてマイクに入力された音声を録音する

Chapter4 UI
  • 037 3D 表現を用いたUI


  • 038 UINavigationController の遷移アニメーションをカスタマイズする
  • 039 バウンスさせてビューを出す
  • 040 PathやFacebookライクなスライドメニューを実装する


  • 041 数値をバッジで表示する


  • 042 スクロール付きタブバーを実装する
  • 043 UIAlertViewを左寄せにする


  • 044 UIView サブクラスをxibファイルから生成する
  • 045 xibファイルのローカライズをInterface Builder上でできるようにする


  • 046 背景色にビルトインテクスチャを適用する


  • 047 GLKitを用いて描画処理を高速化する
  • 048 画面の解像度の種別を判定する
  • 049 Core Plot で折れ線グラフを描画する


Chapter5 テキスト
  • 050 自然言語のテキストを属性で区分する


  • 051 正規表現を使う
  • 052 UILabelでのテキスト表示をリッチにする
  • 053 UILabel / UITextView / UITextFieldのテキストをNSAttributedStringで装飾する


  • 054 UILabel のテキストに効果をかける


  • 055 UILabel の文字列を立体的に見せる


  • 056 UIWebView からアプリ内に入れたカスタムフォントを使う
  • 057 UITextView やUIButton のテキスト位置を調整する
  • 058 UILabel / UITextView の高さを調整する
  • 059 英単語の単数形/複数形変換をおこなう
  • 060 UITextField への入力時にキーボードではなくピッカーを出す


Chapter6 位置情報
  • 061 Google Maps SDK for iOS を使用する


  • 062 MKAnnotationView のコールアウト(吹き出し)をカスタマイズする


  • 063 MKMapView のピンをタップせずにコールアウトを出す
  • 064 指定方向に指定距離離れた場所の緯度経度を計算する


Chapter7 WEB サービス連携
  • 065 UIActivityViewController の連携アプリを追加する


  • 066 カスタムUIAcitivityを実装する


  • 067 UIWebViewで表示中のHTMLコンテンツを取得する
  • 068 App Store のAPI からアプリの最新バージョンを取得する
  • 069 ユーザーにApp Store のレビュー投稿を促す


Chapter8 デバッグ
  • 070 Instrumentsを使わずに空きメモリ/使用メモリ/ CPU 負荷を取得する
  • 071 使用メモリ量やCPU 負荷をリアルタイムにアプリUI 上に表示する


  • 072 例外発生時にスタックトレースを出力する
  • 073 クラス名/メソッド名/コード内の何行目かをログ出力する


  • 074 静的アナライザによる解析を特定のファイルで無効にする
  • 075 アプリ内でログを閲覧する


Chapter9 開発ツール
  • 076 クラスの依存関係を図示する


  • 077 ドキュメントを自動生成する


  • 078 CSVファイルからスクリプトでplistを生成する
  • 079 otoolでアプリが使っているフレームワークの一覧を取得する
  • 080 Apple の開発用ツールをXcodeメニューに追加する

Chapter10 Xcode
  • 081 Xcode のファイルテンプレートを自作する
  • 082 Xcode のFunction Menu にコメントを表示する
  • 083 Xcode のRun Scriptを特定のConfigurationに対してだけ実行する
  • 084 Xcodeマクロ($(SRCROOT)や$(BUILD_DIR)等)の置換内容の一覧を調べる
  • 085 Xcode 4 のCode Snippet Libraryにコードスニペットを追加する


  • 086 ARC の有効/無効をファイルごとに設定する
  • 087 1つのプロジェクトで複数のBundle identifierを使い分ける
  • 088 カラーテーマファイルを用いてXcodeのエディタのカラーをカスタマイズする

Chapter11 その他
  • 089 デバイスにインストールされているアプリ一覧を取得する(方法その1)
  • 090 デバイスにインストールされているアプリ一覧を取得する(方法その2)
  • 091 .ipa ファイル生成を自動化する
  • 092 1行でiOSバージョンを判定する
  • 093 zipファイルを解凍する
  • 094 CSVファイルを読み込む
  • 095 通知名の有無をチェックする
  • 096 NSUserDefaults の内容を一括消去する
  • 097 構造体をNSDictionary やNSArray に格納する
  • 098 オブジェクトが持つプロパティの型と名前の一覧を取得する
  • 099 浮動小数点数の乱数を生成する
  • 100 GCD を用いてバックグラウンドで処理を遅延実行する


補足

  • ほぼすべてのレシピにサンプルコードがついています。
  • iOS6対応(表紙とか帯に入れてもらえばよかった。。)
  • 電子書籍版は、企画発生当初よりお願いしているのですが、いろいろとハードルがあるらしく、まだ今のところ予定がありません。。

買えるところ

(5/28追記)Amazonで売り切れになっていることがあるようなので、オンラインで買える(かつ在庫状況がその場で確認できる)ところをいくつかピックアップして載せておきます。


また、下記リンクから、本書の近隣のリアル店舗における在庫の有無が調べられます。

https://takestock.jp/book/4798038180/search/


[iOS][Objective-C] [iOS 7]Open source collection for Flat Design UI

$
0
0

This is a collection of OSS which helps you implement Flat Design UI on your current version of iOS (iOS5,6) just like that on iOS 7.


FlatUIKit

A collection of flat UI components.






UI7Kit

Backport flat-style UIKit from iOS7 to iOS5+.



iPhone Flat Design UI

A Xcode project which has many templates for Flat Design UI.



QBFlatButton

Flat Style UIButton.



FlatWebView

A subclass of UIWebView that hides the drop shadows behind said UIWebView.



Flat Pill Button


FlatButton


UI components which reproduce iOS7 effects

DKLiveBlur

Live blur effect similar to yahoo weather iOS app and iOS 7. This OSS uses Accelerate.framework, so the blur processing is extremely fast.



CFIFrostedOverlayView

A view that renders its superview with a gaussian blur like iOS 7's Control Center. This OSS uses GPUImage.



Parallax

A view that reproduces the parallax effect of the iOS7 home screen.



Flat UI kit for Photoshop

Free iOS 7 UI Kit

Start designing iOS 7 apps today with this comprehensive GUI kit for Photoshop. Absolutely every element you see is 100% vector and completely editable!



[iOS][Objective-C][ライブラリ]【iOS7】フラットデザインUI実装に役立つライブラリのまとめ

$
0
0

iOS7で採用されたフラットデザインっぽいUIを、現行iOS(〜6.x)で実装する際に役立つOSSをまとめました。後半ではiOS7っぽく下のビューをブラーかけて半透過表示するライブラリや、パララックス表示するライブラリも紹介しています。


* English version of this article


FlatUIKit

フラットデザインなUIコンポーネント詰め合わせ。ソースをみると、ほとんどのコンポーネントが該当するUIKitコンポーネントのカテゴリやサブクラスとしてつくってあって、使いやすそうです。






UI7Kit

iOS5, iOS6 で iOS7 の見た目を実現するUIKitのサブクラス集。



iPhone Flat Design UI

フラットデザインのサンプル集的なXcodeプロジェクト。コンポーネント化されて使い回せるわけではありませんが、こう設定すればこういう見た目にできるのか、という参考になります。



QBFlatButton

フラットな見た目にできるUIButtonのサブクラス。



FlatWebView

UIWebViewの後ろのドロップシャドウをなくしたUIWebViewサブクラス。実装をみると、subviewsを辿ってUIImageViewをhiddenにしているようです。



Flat Pill Button


FlatButton


おまけ1:iOS7ぽいビューを実現するUIライブラリ

DKLiveBlur

動的に下のビューをぼかして半透過っぽく表示してくれるビュー。ちゃんとAccelerate.frameworkを使用して実装されてるのでレスポンス面は期待してよさげ。



CFIFrostedOverlayView

上記同様、superviewをブラーをかけて表示してくれるビュー。こっちはGPUImageを使用



Parallax

パララックス表示するビュー。ただサンプルのアニメーションGIFにあまりパララックス感がないような。。(あとで動かしてみます)



おまけ2:フラットUIデザイン素材

Free iOS 7 UI Kit

Start designing iOS 7 apps today with this comprehensive GUI kit for Photoshop. Absolutely every element you see is 100% vector and completely editable!



[iOS][Objective-C]SLComposeViewController の isAvailableForServiceType: がシミュレータでは必ず YES を返してくる件

$
0
0

下記のコード、実機ではFacebookアカウントを登録していないと NO を返してきますが、シミュレータでは必ず YES が返ってきます。


[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]

地味な話ですが、このことを知らずに、「実機の Facebook や Twitter のアカウントを一旦消すのがちょっと嫌でシミュレータだけでチェック」とかうっかりやってしまうと、あとから実機で問題発覚、となりかねないので要注意です。


参考ページ



[iOS][Objective-C]SLComposeViewController の isAvailableForServiceType: がシミュレータでは必ず YES を返してくる件

$
0
0

下記のコード、実機ではFacebookアカウントを登録していないと NO を返してきますが、シミュレータでは必ず YES が返ってきます。


[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]

地味な話ですが、このことを知らずに、「実機の Facebook や Twitter のアカウントを一旦消すのがちょっと嫌でシミュレータだけでチェック」とかうっかりやってしまうと、あとから実機で問題発覚、となりかねないので要注意です。


参考ページ



[海外就職][iOS]シリコンバレーのiOSハッカソンに参加してきました

$
0
0

マウンテンビューにある『コンピュータ歴史博物館』を会場として、3日間にわたって開催された『iOSDevCamp2013』に参加してきました。



優勝しました!とか華々しい話はないので、さくっと個人的に印象に残った点を書きますと、

  • Skill Offer / Skill Neededっていう掲示板があって、一人で参加しても仲間はずれにならなそう

f:id:shu223:20130721140623j:image:w300


  • エンジニアなお父さん&デザイナーな娘さんのコンビとか、高校の同級生同士で来たようなチームとか、参加者はほんとに老若男女、スキルもさまざま、人種もワールドワイド


  • チケットは有料だけど、営利目的ではなく、参加費はすべて会に還元されるとのことで、実際、会場も良く、ご飯もしっかり出て、コーヒーやビールも出て、景品も豪華だった。
  • みんなノリがよくておふざけ好きな感じだったけど、NDAまわりについてはしっかししていた(iOS7の機能をつかったデモはさせないようにしていた)

僕はプレゼンの申し込み締め切りに遅れてしまいプレゼンすらできませんでしたが、楽しかったので来年また挑戦したいと思います!


iOSDevCamp 2013 Group Photo

(全員での記念写真。右上の方に写っております。)


#僕自身がハッカソンでつくったものもなかなか良いものができたと思ってるのですが、それについてはまた後日。。



[iOS][Objective-C]Facebook の apprequests を Graph API から発行する際の制約

$
0
0

Facebook の apprequests とは、下記のようなダイアログから送信できる「アプリへの招待」です。



で、とある事情によりこれをダイアログを介さず下記APIから直接送りたかったのですが、


(apprequests)

https://developers.facebook.com/docs/reference/api/user/#apprequests


実行してみると、次のようなエラーが出ました。


code = 200;

message = "(#200) All users in param ids must have accepted TOS";

type = OAuthException;


調べてみたところ、Graph APIからの apprequests (アプリへの招待)は、相手が既にそのアプリのユーザーである場合のみ送信可能のようです。


You can only send app requests to users who already use the app - to send user-user requests you should use the Requests Dialog

Facebook Friend Request - Error - ’All users in param ids must have accepted TOS’


It means the $user_id user doesn't use your app - you can only send app->user requests to existing users of your app

“All users in param ids must have accepted TOS” Error


公式ドキュメントでも触れられています。

Note: POSTing to the Graph API endpoint of /USER_ID/apprequests is considered an App to User Request. App-Generated Requests do not receive notifications and get limited distribution in comparison to User to User Requests sent with the Request Dialog

apprequests


余談

requestsダイアログのドキュメントにはこのような記述もありました。


New Facebook policy, effective July 10, 2013: App requests can no longer offer a select all option or pre-select multiple recipients to receive a request.


2013年7月10日より新しいポリシーが施行され、App Requestsのダイアログにおいて全員一括選択や、あらかじめ受信者を複数選択しておくようなオプションはもう提供していないとのことです。


アプリやサイトのプレゼンス向上にあたって Facebook の重要度が高まっている昨今、このように一見便利なようでスパミーな機能は締め出される傾向にあるようです。



[iOS][Objective-C]xcrunコマンドが参照するXcode pathの変更方法、あるいは ”xcrun: Error: could not stat active Xcode path” エラーの対処方法

$
0
0

とある作業中(CocoaPods をインストールし直そうとしていた)に、下記のようなエラーメッセージが出ました。

xcrun: Error: could not stat active Xcode path '/Applications/Xcode5-DP3.app/Contents/Developer'. (No such file or directory)


xcrun コマンドで、存在していない Xcode の Developer フォルダを参照しようとしているために起きているエラーなのですが、そもそも Developer Preview バージョンの Xcode が active とされているのを、現行バージョンの方に向けたい、という場合もあるかと思います。


こういうエラーが出た場合、あるいは xcrun コマンドの active な Xcode path を変更したい場合には、xcode-select -switch というコマンドで、正しい Xcode の Developer フォルダのパスを指定します。


(例)

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

ちなみに、この方法で、『Xcode の Developer Preview バージョンをインストールしている場合に、.xcodeproj を開く Xcode がその Developer Preview になっていて、Get Info (日本語設定だと「情報を見る」)メニューの "Open with:" で正式バージョンの Xcode.app を選択して Change All しても、なぜか Developer Preview バージョンに戻ってしまう』という問題も解決しました。


(参考ページ)

http://stackoverflow.com/questions/11456918/change-xcrun-developer-path



[ライブラリ][iOS][Objective-C]フリーの iOS 向け音声認識/音声合成ライブラリ『OpenEars』の使い方

$
0
0

OpenEars は Politepix 社より提供されているフリーの iOS 向け音声認識/音声合成(Text to Speech, TTS)ライブラリです。


OpenEars

f:id:shu223:20130809204549p:image


話した言葉を認識したり、入力した文字列を読み上げたり(mac の say コマンドみたいなもの)することができます。


試してみたところ超簡単に使えたので、自分のアプリに OpenEars を導入する方法を紹介します。


音声合成の導入方法

フレームワーク追加、ヘッダインポートといった一般的なライブラリの導入手順をのぞけば、基本的にはメソッドを1つ呼ぶだけで導入できます。


1. フレームワークをプロジェクトに追加

解凍したフォルダ配下にあるFrameworkフォルダごとプロジェクトに追加します。フォルダには OpenEars.framework、Slt.framework ほか、言語モデルや辞書が入っています。


また、依存フレームワークである

  • AVFoundation.framework
  • AudioToolbox.framework

をプロジェクトに追加しておきます。


2. ヘッダをインポート
#import <Slt/Slt.h>
#import <OpenEars/FliteController.h>

3. オブジェクトを生成

FliteController, Slt オブジェクトを生成します。


プロパティを定義しておき、

@property (strong, nonatomic) FliteController *fliteController;
@property (strong, nonatomic) Slt *slt;

alloc / init します。

self.fliteController = [[FliteController alloc] init];
self.slt = [[Slt alloc] init];

4. say: メソッドをコール

あとは音声合成で発声させたい文字列を渡して say: メソッドをコールするだけです。

[self.fliteController say:@"Hello world!" withVoice:self.slt];

(補足その1)日本語を発声させる

OpenEars (少なくとも上記の使い方では)日本語には対応していませんが、ローマ字的に文字列を渡すことでそれっぽくすることはできます。

[self.fliteController say:@"Ai ou es apuri kaihatsu. Tatsujinn no recipe hyaku. Hatsubai chuu" withVoice:self.slt];

(補足その2)声を変える

Bitbucket に openearsextras というリポジトリがあり、ここに声を変えるためのデータ(.framework として提供されている)が置いてあります。


たとえば上記では SLT.framework を用いましたが、openearsextras の中にある Awb.framework を用いると、男性の声で読み上げられます。


品質について

音声合成の品質は、英語の場合でも「そこそこ」です。抑揚が変。まだドキュメントを詳しく読んでないのですが、細かいチューニングができるようになっているかもしれません。


音声認識の導入方法

本ブログに VocalKitの使い方 という記事がありますが、執筆時から3年近く経っているので、内容が古くなっている可能性があります。VocalKit のリポジトリも2年以上更新されていません。


この OpenEars は VocalKit と同様に音声認識エンジンとして CMU Sphinx を使用しているので、その代替になりそうです。


実装方法は下記の通り。音響モデルや言語辞書の設定があったり、音声認識の各種ステータスを受け取るためにプロトコルの実装が必要だったりして一見煩雑ですが、要は startListeningWith〜 メソッドを呼んで認識結果を受け取るだけ(発話の検出とかは勝手にやってくれる)なので、とてもシンプルです。


1. フレームワークをプロジェクトに追加

ここは音声合成と同様です。


2. ヘッダをインポート
#import <OpenEars/LanguageModelGenerator.h>
#import <OpenEars/PocketsphinxController.h>

3. プロトコルへの準拠

@interface で、音声認識の各種ステータスを受け取るための OpenEarsEventsObserverDelegate への準拠を宣言しておき、

<OpenEarsEventsObserverDelegate>

各種メソッドを実装します。

- (void)pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis
                        recognitionScore:(NSString *)recognitionScore
                             utteranceID:(NSString *)utteranceID
{
NSLog(@"The received hypothesis is %@ with a score of %@ and an ID of %@",
          hypothesis, recognitionScore, utteranceID);
}

OpenEarsEventsObserverDelegate プロトコルには多くのメソッドが定義されていますが、全部 optional なので、とりあえず認識結果を受け取るための上記メソッドを実装しておくだけでも雰囲気はつかめるかと思います。


4. オブジェクトを生成

各種プロパティを定義しておき、

@property (strong, nonatomic) NSString *lmPath;
@property (strong, nonatomic) NSString *dicPath;
@property (strong, nonatomic) PocketsphinxController *pocketsphinxController;
@property (strong, nonatomic) OpenEarsEventsObserver *openEarsEventsObserver;

言語モデル/辞書のパスと、各種オブジェクトを保持しておきます。delegate プロパティのセットも忘れずに。

NSString *resorcePath = [[NSBundle mainBundle] resourcePath];
self.lmPath = [NSString stringWithFormat:@"%@/%@", resorcePath, @"OpenEars1.languagemodel"];
self.dicPath = [NSString stringWithFormat:@"%@/%@", resorcePath, @"OpenEars1.dic"];

self.pocketsphinxController = [[PocketsphinxController alloc] init];
self.openEarsEventsObserver = [[OpenEarsEventsObserver alloc] init];
[self.openEarsEventsObserver setDelegate:self];

5. 認識スタート

startListeningWithLanguageModelAtPath: メソッドをコールすると音声入力がスタートし、あとは勝手に発話を検出(一定レベルの音声入力を検出して発話開始と判定、一定時間の空白を検出して発話終了と判定)して認識してくれます。

- (void)startListening {

    [self.pocketsphinxController startListeningWithLanguageModelAtPath:self.lmPath
                                                      dictionaryAtPath:self.dicPath
                                                   languageModelIsJSGF:NO];
}

発話を検出するたびに認識処理が走り、手順3で実装した pocketsphinxDidReceiveHypothesis:recognitionScore:utteranceID: が呼ばれます。Hypothesis が候補の文字列、recognitionScore はそのスコアです。


(補足その1)認識終了

stopListening メソッドを呼ぶと認識処理(音声入力の待ち受けと、認識処理)が終了します。

[self.pocketsphinxController stopListening];

(補足その2)言語モデルの動的生成

LanguageModelGenerator を用いると、認識したい言葉の配列から言語モデルを動的に生成することができます。


認識したい言葉(単語/フレーズ)の配列を生成し、

 NSArray *words = @[
                   @"SUNDAY",
                   @"MONDAY",
                   @"TUESDAY",
                   @"WEDNESDAY",
                   @"THURSDAY",
                   @"FRIDAY",
                   @"SATURDAY",
                   @"QUIDNUNC",
                   @"CHANGE MODEL",
                   ];

generateLanguageModelFromArray:withFilesNamed: メソッドをコールします。

LanguageModelGenerator *lmGenerator = [[LanguageModelGenerator alloc] init];
NSError *error = [lmGenerator generateLanguageModelFromArray:words
                                              withFilesNamed:@"OpenEarsDynamicGrammar"];

if (error.code != noErr) {
    
    NSLog(@"Error: %@",[error localizedDescription]);
}
else {
    
    NSDictionary *languageGeneratorResults = [error userInfo];
    
    self.lmPath = [languageGeneratorResults objectForKey:@"LMPath"];
    self.dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"];
}

NSError の userInfo に処理結果が入っている、というのはちょっと変な感じがしますが。。



[iOS][Objective-C][ツール]Web コンテンツ内にネイティブ iOS アプリを埋め込めるサービス『app.io』の使い方

$
0
0

app.io は、『ブラウザ内でネイティブ iOS アプリを動かせるようにする』サービスです。



イメージとしてはiOSシミュレータをそのままWebコンテンツに埋め込める と考えるとわかりやすいかもしれません。タップ等のインタラクションが効いて、もちろん通信もします。アプリのランディングページや、ブログの紹介記事に埋め込んだりすると良さそうです。


で、「導入にはさぞ複雑な手順が。。」と思いきや、実際にアプリを動作させるまでの手順はめちゃくちゃ簡単です。 ファイルを1つアップするだけ。 以下で具体的に説明します。


導入手順

1. アプリをビルド

いつもの普通のビルドです。Xcode でターゲットとして 「シミュレータ」を選択 し、ビルドします。


2. .appファイルをアップロード

"Upload Your App" から、



下記パスにある .app ファイルを zip で固めて アップロードします。

~/Library/Developer/Xcode/DerivedData/{アプリ名}/Build/Products/Debug-iphonesimulator/

以上!


Webコンテンツに埋め込む

左側のメニューにある "Embed" を選択すると、iFrame を使った埋め込みコードが生成されます。




アプリの向きも選択できます。


ちなみにこんなコード。

<iframe src="https://app.io/XXXX?orientation=portrait&device=iphone5" height="607px" width="291px" frameborder="0" allowtransparency="true" scrolling="no"></iframe>

しくみ(憶測)

実際に試してみて、

  • アップするファイル(パッケージ)は .app だけ
  • ブラウザに表示される初期画面はアプリ固有のものではなく、タップするとロードが始まり、アプリが起動する
  • 画質が低い

といった挙動を鑑みるに、 .app を app.io のサーバ側にあるiOSシミュレータ上で動作させ、画面の情報を一定フレームレートでブラウザ側に送る というしくみになっていると思われます。


弱点

使ってみて気付いた中で最大の弱点は、


『設定』アプリにアクセスできない


という点です。ホームボタンを押すとアプリが終了するだけで、ホーム画面等にはアクセスできません。


そんなわけで、Social.framework, Accounts.framework を使用して Facebook や Twitter と連携するアプリ等、『設定』アプリでの設定がコア機能の前提となるアプリには不向きです。


無料でできること

無料ユーザーは、登録アプリは1つだけ、5000Play/月、シェアと埋め込みが可能です。



ちゃんと売りたいアプリのデモとして考えると、1ヶ月に5000回しかplayしてもらえないのは少ないような、でもPVじゃなくて動画の再生回数とかの水準で考えると(※)まずはこれぐらいでも良さそうな、微妙なラインですが、とにかく試すだけなら無料で十分かと思います。


(※)埋め込んだページを表示しただけではアプリの起動は開始されないので、PV = play回数ではない


Xcode プラグイン

app.io は Xcode のプラグインも提供しています。




.app をアップするだけ、という使い方があまりにも簡単だったのでプラグインの方は試してないのですが、 上記画像から、Xcode に app.io にアップロードするメニューが加わる、というもののようです。


サービスを使いやすくするための補助ツールとしてオフィシャルに Xcode プラグインを提供する というのはあまり他サービスで見たことがなかったのでおもしろいと思いました。


アプリにパラメータを渡す

生成したアプリのURLにパラメータを渡すことで、 ローカライズ位置情報の指定NSUserDefaults に値を渡す 、といったことも可能です。


http://docs.app.io/parameters/


ローカライズ

The language parameter lets you specify a ISO-639-1 language code for your app, if it has been localized. Defaults to en. For more information on language codes and what they correspond to, please see this Wikipedia entry

.

Options: en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi


Example Usage: https://app.io/example?language=ja


位置情報の指定

The location parameter lets you specify the latitude and longitude provided to the app for geolocation purposes. Specify latitude and longitude in decimal format as a comma-separated string. Defaults to 37.7859,-122.406509.


Example Usage: https://app.io/example?location=37.82,144.9832


NSUserDefaults に値を渡す

The params parameter lets you specify a JSON dictionary of key/value information to be provided to the app in the form of user defaults. These values will be loaded into NSUserDefaults on app launch and will be available for use by calling NSUserDefaults standardUserDefaults] objectForKey:key] in your app. This is particularly useful for tracking App.io sessions with analytics libraries, or automatically logging in users and loading content. For more information on NSUserDefaults, see the documentation.


Important: This parameter must be specified as a URI-encoded JSON string. This is commonly done using the JavaScript encodeURIComponent function. This JSFiddle can help you format your JSON correctly.


Options: A URI-encoded JSON dictionary.


Example Usage: https://app.io/example?params=%7B"foo"%3A"bar"%7D



[海外就職]アメリカで働きたいエンジニア必見!ハリウッド俳優のマシ・オカ氏が立ち上げた米国の会社で、iOS / Unity デベロッパを募集中!

$
0
0

世界的に有名な俳優であり、超一流のデジタル視覚効果アーティストでもあるあの マシ・オカ 氏が、米国で新たにモバイルゲームの会社を立ち上げるとのことで、スマホ向けゲームを開発できるエンジニアを探しているそうです。


1974年12月27日、日本・東京生まれの日本人。本名は岡 政偉(おか・まさより)。6歳で米国に渡り、少年時代はIQ180の天才児として「TIME」誌の表紙に登場した。ブラウン大学で数学とコンピューターを学んだ後、ジョージ・ルーカスが経営するVFX工房 ILMでデジタル視覚効果アーティストとして働くようになり、映画『スター・ウォーズ』シリーズや『ターミネーター3』『パーフェクト・ストーム』『パイレーツ・オブ・カリビアン/デッドマンズ・チェスト』にVFXスタッフとして参加。並行して俳優活動を続け、「ダーマ&グレッグ」"Scrubs"ほか数々のTVドラマや映画に出演。2006年、本作「HEROES/ヒーローズ」のキャラクターの中でも一番人気の日本人オタク・ヒーロー、ヒロ・ナカムラ役で全米テレビファンの注目を集め、大ブレイク! 2007年ゴールデングローブ賞ではTVシリーズ/ドラマ部門助演男優賞にノミネートされた。(HEROES/ヒーローズより)


フルタイムの正社員としての採用で、就労ビザ取得もサポートしてくれるとのことで、海外で働くことに興味のあるエンジニアにはなかなかないチャンスではないでしょうか。(もし私がまだ AppSociallyにジョイン してなければ確実に応募したと思います)


開発するものはスマホ向けカジュアルゲームで、いずれはマルチプラットフォームにしたいけどまずはiOSを中心に展開する、ということで、技術スキル要件は『iOSまたはUnityでのゲーム開発経験』ということになるかと思います。


米国の会社なので、英語でコミュニケーションできることは必須とのこと。(既に決まっているメンバーは、バックグラウンドもしっかりした優秀な人達だそうです。具体的な人数とか役割とか国籍は聞き忘れました)


興味ある方は、マシオカ氏につなぎますので、ご連絡ください!


Viewing all 317 articles
Browse latest View live