タグ

iOSとFenrirに関するfoxsafariのブックマーク (41)

  • 【連載】Bluetooth LE (1) Bluetooth Low Energy の基礎

    こんにちは。共同開発部 開発担当の伊藤です。 フェンリルの共同開発部ではこれまで数多くの企業様と、iOS、AndroidWindows Phone、Windows 8 と多様なプラットフォームで、多種多様なアプリを共同開発してきました。 その中で得たものは、これまでもここ Developer’s Blog でもご紹介してきましたが、これだけ数多くの環境でアプリが作れる人がいるのだから、ある特定の事柄についてプラットフォームを横断して紹介できるのではないかと考えまして、今週からしばらく Bluetooth Low Energy について集中的にご紹介していきたいと思います。 最近 Bluetooth Low Energy 対応の機器もいろいろ増えてきており、これまで iOS だけだったのが Android 4.3、Windows 8.1 でも使用できるようになってきて話題になっている技術

    【連載】Bluetooth LE (1) Bluetooth Low Energy の基礎
  • 【iOS】XMLパースエラーNSXMLParserSpaceRequiredErrorの対策

    こんにちは、開発担当の常です。 通常、XMLデータを解析する場合、NSXMLParserを使って、NSData *dataを NSXMLParser* parser = [[NSXMLParser alloc] initWithData:data]; といった感じで渡してやれば大丈夫です。 でも、XMLデータの文字エンコードがShift_JISである場合、 <?xml version="1.0" encoding="Shift_JIS" ?> <Project> <project_name>★☆★最優先案件 プロジェクト★☆★</project_name> </Project> 非常に稀なケースですが、NSXMLParserSpaceRequiredErrorというパースエラーが発生します。 特に、iOS 6 において、発生頻度が高いようです。 iOSのドキュメントに、下記のような説明があ

    【iOS】XMLパースエラーNSXMLParserSpaceRequiredErrorの対策
  • 【iOSアプリ開発裏話】Sleipnir Mobile 1.3 で Hold And Go をどう改善したのか

    こんにちは。iOS アプリ開発担当の宮です。 Hold And Go はリンクを長押しした時に背面で新規タブしてくれる Sleipnir Mobile の便利機能です。以前のバージョンではリンクがハイライトするにも関わらず、背面でタブが開かれずに何も起きないことがありました。せっかくの便利な機能がもったいないので、バージョン1.3 で改善をしました。 今回は、なぜ Hold And Go がたまに失敗するのか、またそれをどうやって改善したのかについて説明しようと思います。 ■ Hold And Go の仕組み Hold And Go は次の流れで実行されます。 1. iOS でのタッチポイントを HTML 上の座標に変換する 2. JavaScript の elementFromPoint でその座標にある DOM の要素を取得する 3. 取得した要素にリンクがあれば、その URL を背

    【iOSアプリ開発裏話】Sleipnir Mobile 1.3 で Hold And Go をどう改善したのか
    foxsafari
    foxsafari 2013/07/17
    【iOSアプリ開発裏話】Sleipnir Mobile 1.3 で Hold And Go をどう改善したのか
  • 【iOS】UIWebView Hacks 〜ブラウザ開発テクニック〜

    こんにちは。 Sleipnir Mobile for iPhone / iPad 開発担当の宮です。 調べてみると、Sleipnir Mobile の最初のコミットは 2010年9月6日で、もう3年近く開発しているようです。最初はこんな貧弱な API でブラウザなんて作れるわけ無いと思っていましたが、なんとかなるものですね。今では多くのユーザーさんに使っていただけるプロダクトになりました。 今回は、この3年間で、使ってきた UIWebView の技を紹介したいと思います。詳細な方法については書きませんが、UIWebView で何ができて何ができないのかはわかるかと思います。それぞれの詳細なやり方については機会があれば書いていきたいです。 目次 長くなりそうなので、目次を用意しました。 余裕があればアップデートするので、ブックマークでもしておいてください。 UIWebView の API

    【iOS】UIWebView Hacks 〜ブラウザ開発テクニック〜
  • 【非デザイナー向け】フラットデザインに欠かせないピクトグラム的アイコンの作り方

    iOS 7 にもフラットデザインの波がやってきましたね…! フラットデザインには欠かせない、ピクトグラム的アイコンはリッチデザインなアイコンと比較して簡単に作れそう!作ってみよう!という方もいるのではないでしょうか。 ちなみにピクトグラムというのは記号や絵文字を指し、共通言語としての役割を持っています。 見かけは簡単そうですが奥は深いのです、、ただ、技術面での高度さはあまり必要ないと思います。表現方法が限られる分難しい部分も多いですが… 今回は興味があるけどどこから手を付ければいいの?という方向けにピクトグラム的アイコンの作り方を紹介したいと思います。 アイコンのモチーフを決める アイコン案はこんな感じで出しています。 例として「医療」アイコンで考えてみました。こういった図にして 考えると道筋が立てやすく、後で迷った際に復帰しやすいです。 その場で図が浮かぶ物は描き足しておきます。 決める

    【非デザイナー向け】フラットデザインに欠かせないピクトグラム的アイコンの作り方
  • Apple が公開しているオープンソースソフトウェアいろいろ

    こんにちは。Mac / iOS アプリ開発担当の金内(Emacs 派)です。 UNIX ベースである Mac OS X は、たくさんのオープンソースソフトウェアから成り立っています。基盤である Darwin はカーネルを含む OS そのものがオープンソースですし、 OS X の兄弟にあたる iOS や Xcode を中心とした開発環境もまた、オープンソースソフトウェアを多く含んでいます。 いろいろと秘密主義で有名な Apple ですが、ソースコードを公開・共有することでオープンソースの世界に多くの貢献をしているのも事実です。 WebKit Apple とオープンソースといったときに最もピンとくるのは WebKit プロジェクトではないでしょうか。 フェンリルのウェブブラウザ Sleipnir とも切っても切れない関係にある、ウェブコンテンツのレンダリングエンジンです。 KDE プロジェクト

    Apple が公開しているオープンソースソフトウェアいろいろ
  • 【iOS/Mac開発】GUI 開発の秘薬「あとで実行」でトラブル回避

    こんにちは。iOS / Mac アプリ開発担当の金内です。 今日は GUI アプリ開発で役立つのに、通常の学習フローにはなかなか登場してこないワザをご紹介します。 イベント駆動型プログラム iOS や Mac で使うような GUI アプリは一般に「イベント駆動型(イベント・ドリブン)」と呼ばれていて、ユーザーやシステムの動きがイベントとしてアプリケーションに通知され、処理が実行されるという作りになっています。 たとえば、スクロールバーをドラッグすると「スクロールしたよ」というイベントが発生して、そのウインドウの内容がスクロールしたり、ウェブブラウザのリンクをクリックすると「クリックしたよ」というイベントが発生してリンク先のページをロードしたりするわけです。 このところ「〇〇駆動」という言葉をよく見かけますが、この「イベント駆動」はソフトウェア関連では元祖といってもいいくらい古くから使われて

    【iOS/Mac開発】GUI 開発の秘薬「あとで実行」でトラブル回避
  • iOS アプリのバイナリを少しのぞいてみる

    Mac / iOS 開発担当の松です。 皆さんご存知のように iOS アプリを作るのに欠かせない Objective-C は、メソッドの解決が動的なこともあり、C言語のファミリーでありながら強力なリフレクション機能を備えています。そのリフレクションの必要性等から、実行ファイルには様々な情報が埋め込まれていて、何気なくバイナリエディタで開いただけで、テンションが上がるバイナリに仕上がっています。のぞかずにはいられませんね。という訳で今日はこのバイナリを少しのぞいてみたいと思います。 まずはバイナリの概要を抑えておきましょう。iOS 上の実行ファイルは Mach-O という形式で(まーく・おーと読むらしい)、これは WindowsLinux でいうところの EXE や ELF にあたります。この Mach-O のフォーマットについては アップルからドキュメントが提供されていますね。 細

    iOS アプリのバイナリを少しのぞいてみる
  • 文字列を Objective-C っぽくクールに作る

    こんにちは。Sleipnir 3 for Mac 開発担当の福井です。 Mac/iOS エンジニアのみなさん、突然ですがコーディング中に文字列を作るとき、NSString の API はきちんと使えていますか?ちょっとした文字の追加に NSMutableString を作ったり、[NSString stringWithFormat:] を使って新しく文字列を作ったりしていませんか?できているけど少しむりやりでなにかダサい、そんなコード書いていませんか?多くのパターンでは Foundation の API を使うことでより簡潔に表現することができます。基API を的確に使って、ワンランク上のエンジニアを目指しましょう。 文字列の追加 冒頭でも触れましたが、ちょっと文字列を追加したいというケースはよくあると思います。しかし、いちいち編集用の NSMutableString を作ったり、[

    文字列を Objective-C っぽくクールに作る
  • UIKit とスレッドのお約束

    アプリが小気味よく動くようにするために、メインスレッドでの重たい処理を避けて、適宜バックグラウンドスレッドに処理を回すことはよくあります。 このとき注意が必要なのは、バックグラウンドでの処理結果を画面に反映させる時の以下のお約束です。 UIKit のオブジェクトはメインスレッド以外からアクセスしてはいけない Apple のドキュメントとしては Cocoa Fundamentals Guide に “All UIKit objects should be used on the main thread only” と書いてあります。この制限は UIKit 特有ではなく、Java の Swing などでも共通の設計です。GUI のパフォーマンスを良くするために、スレッドセーフをあえて捨てて単純化しているのです。 ではどうすれば良いのかと言うと、バックグラウンドスレッドからメインスレッドに処理を

    UIKit とスレッドのお約束
  • クラッシュの原因にありがちなイージーミス

    アプリがクラッシュする原因はさまざまです。その中でも、解放(dealloc)済みオブジェクトへのアクセス (EXC_BAD_ACCESS) によるクラッシュの原因としてありがちなイージーミスを2つ挙げてみます。 インスタンス変数に autorelease なオブジェクトをそのまま代入 インスタンス変数は通常そのクラスのインスタンスがオーナーシップを持つ必要があります。この場合の典型的な書き方として次の2つが挙げられます。 retain で宣言されているプロパティ経由でオブジェクトを代入する場合(self.button = aButton;) インスタンス変数に代入するときに retain 等 retainCount を増やすメッセージを送っておく場合(button = [aButton retain];) この2つの書き方が混在していると次のような間違いが起こりがちです。 UIButton

    クラッシュの原因にありがちなイージーミス
  • メソッドの遅延実行

    あるメソッドを一定時間後に実行したい、ということはよくあります(これを、メソッドの遅延実行と呼ぶことにします)。そんなときにまず思いつくのは NSTimer を使う方法ではないでしょうか。 NSTimer を使う以外にも、NSObject にある次のメソッドで簡単に同じことができます。 NSObject - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay 例として、iPhone 標準搭載の写真アプリを見てみましょう。 写真アプリでは、写真を見ている間に一定時間ユーザの操作が無ければ、ツールバーとナビゲーションバーが消えます。 この処理は次のようなコードで実現できます。 // self は UIViewController … { … // 一定時間

    メソッドの遅延実行
  • Core Animation で画像を回す

    データのダウンロード中など待ち状態のときに、画像をくるくる回して読み込み中だということを表したいことってありますよね。アニメーション GIF や複数の画像の切り替えでも表現できますが、今回は1枚の画像を Core Animation の transform プロパティを使って回す方法を紹介したいと思います。 まず、アニメーションには CABasicAnimation を使います。作成するときに、animationWithKeyPath に transform をセットします。 つぎに、回転のはじめと終わりの角度を設定します。時計回りの場合は fromValue を 0、toValue を 2π にします。反時計回りと場合は fromValue と toValue の値を入れ替えてください。 そして、valueFunction で回転軸を決めます。今回は z 軸で回転させたいので、kCAVa

    Core Animation で画像を回す
  • UITableViewController を使わない設計

    iOS のアプリ開発における主役クラスの1つである UIViewController。中でも、実用系のアプリを作る際には UITableView を表示するための UITableViewController が活躍してくれます。Xcode の新規クラスのテンプレートにも含まれていますね。 UITableViewController は UIViewController のサブクラスで、UITableViewDataSource と UITableViewDelegate という、UITableView を扱うのに必要な2つのプロトコルに適合しています。UITableView を表示する画面なら、基的に UITableViewController クラスだけで事足りてしまいます。 とても便利なクラスである反面、複雑な処理をしようとすると、どんどん肥大化してしまうという欠点もあります。原因の

    UITableViewController を使わない設計
  • 画面レイアウトを行うときに便利なツール

    先週の荻野のブログエントリではアプリケーション上の各要素間の間隔について書かれていました。デザイナが導き出した各要素間の間隔を限りなく忠実にコーディングするための助けとなるツールを紹介したいと思います。 xScope Shareware $26.95 http://iconfactory.com/software/xscope マウスカーソルのある場所から上下左右の距離を自動ではかってくれる Dimensions 機能が大変便利です。シミュレータ上で動いているアプリの各要素間の距離を測りたい時にはマウスカーソルを動かしていくだけです。Dimenshions 機能以外にも Ruler 機能、Loupe 機能など盛りだくさんです。 Free Ruler Free http://www.pascal.com/software/freeruler/ Ruler 機能のみのシンプルなところと Fre

    画面レイアウトを行うときに便利なツール
  • UITableViewCell の accessoryView を使うと少し楽

    UITableViewCell の accessoryView というプロパティについてです。それほどマイナーなプロパティでもないので、実は当たり前なのかもしれませんが、最近便利さに気付いたので紹介します。 UITableViewCell には accessoryType というプロパティがあって、3種類のアクセサリが付けられます。 accessoryView は、これをカスタムな見た目にしたい時に使うぐらいのものだという認識でした。実際そうなのですが、よく考えたら UIView ならなんでも入れられるわけで、UISwitch だって入れられるんだなと。設定画面でスイッチがよく出てくるのですが、今まで contentView に addSubview していて、位置を合わせるのが面倒だと思っていました。でも accessoryView なら次のコードで終わりです。frame の origi

    UITableViewCell の accessoryView を使うと少し楽
  • パキッとした描画

    iOS では座標を浮動小数点型(CGFloat)で指定します。アンチエイリアスのかかった美しい表示のために必要な機構ですが、くっきりとした(パキッとした)描画を行うには少しコツがいります。 例えば、CGContext を使って (100, 100) から (200, 100) へ太さ1ピクセルの黒100%のラインを引く際、そのままコードにすると次のようになります。 CGContextRef ctx = UIGraphicsGetCurrentContext(); CGFloat x, y; [[UIColor blackColor] set]; CGContextSetLineWidth(ctx, 1.0); x = 100; y = 100; CGContextMoveToPoint(ctx, x, y); CGContextAddLineToPoint(ctx, x + 100, y)

    パキッとした描画
  • ありがとう alloc-init

    Objective-C では、オブジェクトの生成に alloc と init などのイニシャライザを組み合わせて使うというのは、ちょっとでもかじったことがある方はご存じでしょう。 MyObject *obj = [[MyObject alloc] init]; 今日はこの仕組みについてです。まず、この alloc-init について2つのポイントを挙げておきます。 呼出し側はイニシャライザの戻り値を使うことになっている イニシャライザはクラスのインスタンスメソッドとしてプログラマが追加/オーバーライドできる Objective-C ではこのことが言語の基として存在しているおかげで、オブジェクト生成の柔軟性がぐっと上がっています。イニシャライザはプログラマが実装するので、どのようなインスタンスを返すかは自由です。上記の例で言えば MyObject の init は、MyObject そのも

    ありがとう alloc-init
  • UITextField でのバリデーションのタイミング

    アプリによってはユーザーの入力値をバリデーションする必要がある場合があります。今回はバリデーションを行うタイミングについて書きたいと思います。 今回は以下のようなアカウント情報入力画面を考えてみます。 UITextField が画面に表示されている NavigationBar には「保存」ボタンが設置されている 入力値が「カラ」もしくは「空白文字」以外の場合を正常な入力とする UITextField への入力値が不正な値の場合には「保存」ボタンを無効化する UITextField のデリゲートでは不十分? UISearchBarDelegate には以下のような入力後に呼ばれるデリゲートメソッドがあります。 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText しかし、UITextFi

    UITextField でのバリデーションのタイミング
  • Settings.bundle でデバッグ向け設定を追加する

    Settings.bundle を作成 特定のビルド設定で Settings.bundle を削除するようなビルドスクリプトを追加 ビルド設定にユーザー定義変数を定義 適宜、UserDefaults の任意の値を参照するようなコードを追記 方法 こちらのドキュメントを参考に Settings.bundle を作成 ビルドスクリプトを追加 Xcode のメニューバーから ”Project” > ”New Build Phase” > ”New Run Script Build Phase” をクリック 出てきたウインドウに以下のようなスクリプトを記入 if [ "${DELETE_SETTINGS_BUNDLE}" == 1 ]; then rm -Rf "${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}/Settings.bundle" fi ユーザー定義変

    Settings.bundle でデバッグ向け設定を追加する