iOS

SceneDelegate 時代にコードだけで iOS アプリを実装し始める手順

iOS 13 で SceneDelegate が導入されて、Storyboard を使わずコードだけで iOS アプリを開発し始める手順が変わっていたのでメモ。 まず、メインインタフェースを空にする。これは以前と同じ。 Info.plist の UISceneStoryboardFile を削除。 SceneDelegate …

Xamarin.iOS での Microsoft.Data.Sqlite の利用

Microsoft.Data.Sqlite は、Xamarin で SQLite を使うときの定番になっている sqlite-net-pcl と同じく、SQLitePCL.raw に依存している。 sqlite-net-pcl が Xamarin.iOS で利用できるということは、Microsoft.Data.Sqlite も利用できるに違いない。 サンプ…

iOS 版 Xamarin.Forms 製アプリの Launch Screen の背景色が白っぽくなる

Xamarin.Forms で開発しているアプリの iOS 版の Launch Screen に LaunchScreen.storyboard を指定し、 デザイナで背景色の RGB 値を設定した。 そしていざデバッグ実行すると、Launch Screen の背景色が実際に設定した色より白っぽく表示されているように…

Xamarin.iOS でキーチェーンを有効にする

Xamarin.iOS でアプリを作っていて、キーチェーンを使いたくなったときにいつも嵌るので、有効化の方法をメモしておく。 Visual Studio for Mac でプロジェクトを開いている状態で、まずは Entitlements.plist を開き、 「キーチェーンを有効にする」にチェ…

UILabel と UITextField を配置したカスタムセルを自作した

登録画面で使うために、UILabel と UITextField を配置したカスタムセルを、コードだけで実装してみた。 Xamarin.Forms なら EntryCell があるけど、あいにく Xamarin.iOS で開発しているアプリなもので。 レイアウトはもちろん AutoLayout を使ってる。ただ…

UINavigationController の rootViewController を変更する

UINavigationController の setViewControllers メソッドを使って、ごっそり入れ替えればいい。 以下サンプルコード。Xamarin.iOS だけど。 NavigationController.SetViewControllers( new [] { newRootViewController }, animated);

Bitbucket の iOS クライアントは CodeBucket で決まり

Bitbucket の iOS クライアント『CodeBucket』がいつの間にか無料になっていた。 codebucket.dillonbuchanan.com Bitbucket の iOS クライアントといえば、自分でもイシューに特化した『Bitissues』を作って使っていたけど、無料と知って即 CodeBucket に乗…

Bitissues を Swift で実装し直した

春に RubyMotion で実装し直した Bitbucket のイシュー専用クライアント『Bitissues』だけど、 今度は Swift で実装し直した。 https://itunes.apple.com/jp/app/bitissues/id693561154?mt=8&at=10l8JW&ct=hatenablog 1 つのアプリを Objective-C、RubyMotio…

DTCoreText で NSAttributedString を高速に描画

先日、HTML 文字列を NSAttributedString に変換する方法を書いた。 HTML を NSAttributedString に変換する - present NSAttributedString を UILabel の attributedText にセットするだけで、 お手軽に HTML を表示できるけど、UILabel は描画が非常に遅い…

HTML を NSAttributedString に変換する

HTML の文字列は let html = "<h1><a href=\"http://tnakamura.hatenablog.com\">Title</a></h1>" + "<ul>" + "<li><strong>Item1</strong></li>" + "<li><i>Item2</i></li>" + "</ul>" let data = html.dataUsingEncoding( NSUTF8StringEncoding, allowLossyConversion: true) let attrStr = NSAttributedString(HTMLData: data…

AFNetworking と ReactiveCocoa を組み合わせる

ReactiveCocoa を導入したからには使い倒す方針でやっていて、 AFNetworking を使った Web API 呼び出しは、次のようにして RACSignal 化している。 let signal = RACSignal.createSignal({ (subscriber) -> RACDisposable! in let manager = AFHTTPRequestO…

Swift で ReactiveCocoa を使う

はじめに Swift で iOS アプリを実装し直すにあたって、 ただ Swift に翻訳するだけではつまらないので、 MVVM アーキテクチャで実装することに決めた。 View/ViewController と ViewModel のバインド、 イベントや非同期 API 呼び出しのインタフェースを統…

Swift で AFNetworking を使う

CocoaPods で AFNetworking をインストール Podfile に pod "AFNetworking" を追加して pod install 実行。 Bridging-Header で AFNetworking のヘッダーをインポート <プロジェクト名>-Bridging-Header.h に #import <AFNetworking/AFNetworking.h> #import <AFNetworking/UIImageView+AFNetworking.h> を追加。 画像の非同期ダウン</afnetworking/uiimageview+afnetworking.h></afnetworking/afnetworking.h>…

UITableView 編集時に挿入用の行を表示したい

UITableView 編集時のみ、挿入用の行を表示したい。こんなやつ。 アイコン自体は tableView:editingStyleForRowAtIndexPath で UITableViewCellEditingStyleInsert を返せば表示できる。 ただ、編集時のみ挿入用の行を表示するとなると、結構面倒だった。 以…

Bitissues を RubyMotion で書き直してリリース

Objective-C で作っていた Bitbucket Issues の iOS クライアント『Bitissues』を RubyMotion で書き直した。 Apple の審査もすんなり通過。 これが初めてリリースする RubyMotion 製アプリになる。 今回のリリースで、ようやくイシューのステータスを変更で…

UITableView のセパレーターの描画がおかしい

iOS

まずはこれを見て欲しい。 UITableView のセパレーターがおかしなことになっている。 左端に隙間が開いているものもあれば、左端までぴったり線が描画されているものもある。 左端までぴったり線が描画されているものは、線も少し太い。 UITableView の sepa…

RubyMotion でリポジトリに含めたくない設定を外部ファイルに抜き出す

Web API の consumer_key と consumer_secret のような、 人に知られたくないキーは Git リポジトリに含めたくない。 そこでキーを git リポジトリ管理外の設定ファイルに抜き出すことにした。 設定ファイルを読み込んで RubyMotion でいい感じに扱うための …

MBProgressHUD を使ったローディング表示

iOS アプリがサーバーと通信している間ローディング表示を出すために、 MBProgressHUD を導入することにした。 jdg/MBProgressHUD MBProgressHUD の基本的な使い方。 まずサブビューに追加し、 self.hud = [[MBProgressHUD alloc] initWithView:self.view]; …

AFNetworking 2.x の AFHTTPRequestOperationManager でベーシック認証に対応する

ベーシック認証のユーザー名とパスワードは、AFHTTPRequestSerializer にセットすればいい。 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; manager.requestSerializer = [[AFHTTPRequestSeriali…

Objective-C コードで Auto Layout を設定するためのライブラリを書いた

Xcode 5 になって、InterfaceBuilder や Storyboard で Auto Layout を設定しやすくなったけど、 コードで Auto Layout 設定したいときが稀にある。 例えば自分の場合、継承して使いまわすことを前提に View や ViewController のベースクラスを作るときとか…

AutoLayout で UIImageView の幅を固定したのに横長の画像を表示すると幅が変わってしまう

AutoLayout で UIImageView の幅を 80 に固定 UIImageView の contentMode は UIViewContentModeScaleAspectFill このとき、縦よりも横の幅がかなり長い画像を表示すると、UIImageView の幅が変わってしまった。 調べたところ、縦横のアスペクト比が違う場合…

依存ファイルの自動解決に失敗したときは motion-require

RubyMotion は Smart File Dependencies 機能があるので、依存ファイルを自動で解決してくれる。 でも、たま~に解決できなくて定数未定義エラーに遭遇するときがある。 そんなときは Rakefile で files_dependencies を記述すればいいんだけど、 依存してい…

ADBannerView の delegate を Storyboard で設定しない方がいい?

審査でリジェクトを受けて発覚したんだけど、 Storyboard で ViewController に ADBannerView を配置 Storyboard で ViewController を ADBannerView の delegate に設定 ViewController に ADBannerViewDelegate のメソッドを実装 ADBannerViewDelegate の…

AutoLayout を使って ADBannerView を配置する方法

ADBannerView は広告取得に失敗したら隠さないと、レビューでリジェクトされてしまう。 今までは広告取得に失敗したら frame を操作して画面外に移動していた。そのためのモジュールを Objective-C で書いたりもした。でも最近は AutoLayout を使うようにし…

Teacup の AutoLayout サポートを使ってカスタム UITableViewCell をレイアウトする

RubyMotion 用 gem の Teacup は、CSS っぽくビューのデザインを記述できる、 厳密にはビューのプロパティを設定するための内部 DSL。 なんと AutoLayout もサポートしていたりする。 rubymotion/teacup Teacup の AutoLayout を使って、カスタム UITableVie…

CoreDataQuery と NSFetchedResultsController を組み合わせる

CoreData でデータをフェッチするときは NSFetchedResultsController を使いたいけど、 CoreDataQuery には NSFetchedResultsController を取得するメソッドが無い。 その代わり NSFetchRequest は取得できるから、 CDQQuery っていう CoreDataQuery 内部で…

CoreDataQuery は気に入らなくても ruby-xcdm は使ったほうがいい

RubyMotion 用の CoreData ラッパー gem である CoreDataQuery を先日から使い始めた。当初は理想の gem に出会ったと思っていたが、使っているうちに気に入らない箇所がちらほら。 自分は Named Scope が使いたいので多少の不満には目を瞑っている。でも人…

Objective-C で YAML を扱うなら YAML-Framework が手軽

mirek/YAML.framework CocoaPods でインストールできる LibYAML のラッパーで、Objective-C っぽい API を提供している。 YAML のパースはこんな感じ。 NSString *yamlText = @"- title: 第一章\n" " articles:\n" " - title: 第一話\n" " path: Story1\n" "…

Objective-C での日付操作が苦行過ぎるので NSDate-Escort を導入した

Objective-C の日付操作では NSDate だけじゃなく NSDateComponents や NSCalendar が登場してきて、 その面倒くささはもはや苦行。 そもそも、簡単に年や月を取得できない NSDate の API がイケてない。 日付操作をもっと手軽にやりたい。 もう自分でライブ…

CoreDataQuery は求めていた gem かもしれない

CoreDataQuery という CoreData ラッパー gem が公開された CoreDataQuery - CDQ | InfiniteRed 開発元は RubyMotionQuery と同じ InfiniteRed。 RubyMotion ではラッパー gem じゃなくて、MagicalRecord や NLCoreData のような Objective-C のライブラリを…