iOS
iOS 13 で SceneDelegate が導入されて、Storyboard を使わずコードだけで iOS アプリを開発し始める手順が変わっていたのでメモ。 まず、メインインタフェースを空にする。これは以前と同じ。 Info.plist の UISceneStoryboardFile を削除。 SceneDelegate …
Microsoft.Data.Sqlite は、Xamarin で SQLite を使うときの定番になっている sqlite-net-pcl と同じく、SQLitePCL.raw に依存している。 sqlite-net-pcl が Xamarin.iOS で利用できるということは、Microsoft.Data.Sqlite も利用できるに違いない。 サンプ…
Xamarin.Forms で開発しているアプリの iOS 版の Launch Screen に LaunchScreen.storyboard を指定し、 デザイナで背景色の RGB 値を設定した。 そしていざデバッグ実行すると、Launch Screen の背景色が実際に設定した色より白っぽく表示されているように…
Xamarin.iOS でアプリを作っていて、キーチェーンを使いたくなったときにいつも嵌るので、有効化の方法をメモしておく。 Visual Studio for Mac でプロジェクトを開いている状態で、まずは Entitlements.plist を開き、 「キーチェーンを有効にする」にチェ…
登録画面で使うために、UILabel と UITextField を配置したカスタムセルを、コードだけで実装してみた。 Xamarin.Forms なら EntryCell があるけど、あいにく Xamarin.iOS で開発しているアプリなもので。 レイアウトはもちろん AutoLayout を使ってる。ただ…
UINavigationController の setViewControllers メソッドを使って、ごっそり入れ替えればいい。 以下サンプルコード。Xamarin.iOS だけど。 NavigationController.SetViewControllers( new [] { newRootViewController }, animated);
Bitbucket の iOS クライアント『CodeBucket』がいつの間にか無料になっていた。 codebucket.dillonbuchanan.com Bitbucket の iOS クライアントといえば、自分でもイシューに特化した『Bitissues』を作って使っていたけど、無料と知って即 CodeBucket に乗…
春に RubyMotion で実装し直した Bitbucket のイシュー専用クライアント『Bitissues』だけど、 今度は Swift で実装し直した。 https://itunes.apple.com/jp/app/bitissues/id693561154?mt=8&at=10l8JW&ct=hatenablog 1 つのアプリを Objective-C、RubyMotio…
先日、HTML 文字列を NSAttributedString に変換する方法を書いた。 HTML を NSAttributedString に変換する - present NSAttributedString を UILabel の attributedText にセットするだけで、 お手軽に HTML を表示できるけど、UILabel は描画が非常に遅い…
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…
ReactiveCocoa を導入したからには使い倒す方針でやっていて、 AFNetworking を使った Web API 呼び出しは、次のようにして RACSignal 化している。 let signal = RACSignal.createSignal({ (subscriber) -> RACDisposable! in let manager = AFHTTPRequestO…
はじめに Swift で iOS アプリを実装し直すにあたって、 ただ Swift に翻訳するだけではつまらないので、 MVVM アーキテクチャで実装することに決めた。 View/ViewController と ViewModel のバインド、 イベントや非同期 API 呼び出しのインタフェースを統…
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 編集時のみ、挿入用の行を表示したい。こんなやつ。 アイコン自体は tableView:editingStyleForRowAtIndexPath で UITableViewCellEditingStyleInsert を返せば表示できる。 ただ、編集時のみ挿入用の行を表示するとなると、結構面倒だった。 以…
Objective-C で作っていた Bitbucket Issues の iOS クライアント『Bitissues』を RubyMotion で書き直した。 Apple の審査もすんなり通過。 これが初めてリリースする RubyMotion 製アプリになる。 今回のリリースで、ようやくイシューのステータスを変更で…
まずはこれを見て欲しい。 UITableView のセパレーターがおかしなことになっている。 左端に隙間が開いているものもあれば、左端までぴったり線が描画されているものもある。 左端までぴったり線が描画されているものは、線も少し太い。 UITableView の sepa…
Web API の consumer_key と consumer_secret のような、 人に知られたくないキーは Git リポジトリに含めたくない。 そこでキーを git リポジトリ管理外の設定ファイルに抜き出すことにした。 設定ファイルを読み込んで RubyMotion でいい感じに扱うための …
iOS アプリがサーバーと通信している間ローディング表示を出すために、 MBProgressHUD を導入することにした。 jdg/MBProgressHUD MBProgressHUD の基本的な使い方。 まずサブビューに追加し、 self.hud = [[MBProgressHUD alloc] initWithView:self.view]; …
ベーシック認証のユーザー名とパスワードは、AFHTTPRequestSerializer にセットすればいい。 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; manager.requestSerializer = [[AFHTTPRequestSeriali…
Xcode 5 になって、InterfaceBuilder や Storyboard で Auto Layout を設定しやすくなったけど、 コードで Auto Layout 設定したいときが稀にある。 例えば自分の場合、継承して使いまわすことを前提に View や ViewController のベースクラスを作るときとか…
AutoLayout で UIImageView の幅を 80 に固定 UIImageView の contentMode は UIViewContentModeScaleAspectFill このとき、縦よりも横の幅がかなり長い画像を表示すると、UIImageView の幅が変わってしまった。 調べたところ、縦横のアスペクト比が違う場合…
RubyMotion は Smart File Dependencies 機能があるので、依存ファイルを自動で解決してくれる。 でも、たま~に解決できなくて定数未定義エラーに遭遇するときがある。 そんなときは Rakefile で files_dependencies を記述すればいいんだけど、 依存してい…
審査でリジェクトを受けて発覚したんだけど、 Storyboard で ViewController に ADBannerView を配置 Storyboard で ViewController を ADBannerView の delegate に設定 ViewController に ADBannerViewDelegate のメソッドを実装 ADBannerViewDelegate の…
ADBannerView は広告取得に失敗したら隠さないと、レビューでリジェクトされてしまう。 今までは広告取得に失敗したら frame を操作して画面外に移動していた。そのためのモジュールを Objective-C で書いたりもした。でも最近は AutoLayout を使うようにし…
RubyMotion 用 gem の Teacup は、CSS っぽくビューのデザインを記述できる、 厳密にはビューのプロパティを設定するための内部 DSL。 なんと AutoLayout もサポートしていたりする。 rubymotion/teacup Teacup の AutoLayout を使って、カスタム UITableVie…
CoreData でデータをフェッチするときは NSFetchedResultsController を使いたいけど、 CoreDataQuery には NSFetchedResultsController を取得するメソッドが無い。 その代わり NSFetchRequest は取得できるから、 CDQQuery っていう CoreDataQuery 内部で…
RubyMotion 用の CoreData ラッパー gem である CoreDataQuery を先日から使い始めた。当初は理想の gem に出会ったと思っていたが、使っているうちに気に入らない箇所がちらほら。 自分は Named Scope が使いたいので多少の不満には目を瞑っている。でも人…
mirek/YAML.framework CocoaPods でインストールできる LibYAML のラッパーで、Objective-C っぽい API を提供している。 YAML のパースはこんな感じ。 NSString *yamlText = @"- title: 第一章\n" " articles:\n" " - title: 第一話\n" " path: Story1\n" "…
Objective-C の日付操作では NSDate だけじゃなく NSDateComponents や NSCalendar が登場してきて、 その面倒くささはもはや苦行。 そもそも、簡単に年や月を取得できない NSDate の API がイケてない。 日付操作をもっと手軽にやりたい。 もう自分でライブ…
CoreDataQuery という CoreData ラッパー gem が公開された CoreDataQuery - CDQ | InfiniteRed 開発元は RubyMotionQuery と同じ InfiniteRed。 RubyMotion ではラッパー gem じゃなくて、MagicalRecord や NLCoreData のような Objective-C のライブラリを…