酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発-iOS

SVGKitをアップデートしたらLOG_LEVEL_VERBOSEの定義がなくてビルドができない

ikatomoは数多くのサードパーティー製のライブラリを使用しています。 ikatomoをSwift 3.0へアップデートさせようと考えました。しかし、ライブラリの多くはSwift 3.0対応中で現時点での移行は難しそうです。 となればikatomoの更新作業は放置でも良いのです…

Swift3.0でRealmSwiftのビルドが通らない

Xcode 8とiOS 10が正式に公開されました。Swift 2からSwift 3への移植は結構大変という前評判だったので、ボチボチ手をつけていくかぁ……とSwift 3対応を始めたもののすぐに詰まってしまいました。 最近作っているikatomoもPokétomoも、両方ともデータを保存…

SwiftでRGBからHSVへ変換する

RGBの値をHSVの値に変換するためのコードを書きました。大昔にC#で書いた処理をSwiftに移植しました。 説明は上記の記事をご覧ください。以下、HSVクラスです。 class HSV { //色相 var hue: Double = 0 //彩度 var saturation: Double = 0 //明度 var value…

iPhone 4sだとCIDetectorが使えない

カメラで撮影した画像に対してCIDetectorを使って文字認識させようとしたところエラーが発生したので調査しました。 iPhone 4sだとCIDetectorが使えない 結論から書くと、iPhone 4sだとCIDetectorが使えません。 APIとしては存在しているのですがデバイスの…

はてなOAuthがちょっと使いにくいなと思った話

はてなOAuthがちょっと使いにくいなと思った話。 iOSではてなフォトライフに写真をアップロードするアプリを作りたいなと考えています。 はてなOAuthを使うのに最適な方法を考えているのですが思い付きませんでした。実際の最適解がよくわからないのでとりあ…

AutoLayout上でTTTAttributedLabelのリンク(下線)を使うと、iOS 7の場合に下線が一部欠けてしまう問題

UILabelの表示を豪華(?)にするライブラリのひとつに「TTTAttributedLabel」があります。 長文の途中でリンクを貼りたい場合……たとえば Twitterでリプライをもらった時に@ch3coohの部分だけリンクを貼りたいというニーズがあるかと思います。 TTTAttributedLa…

CocoaPods 1.0を導入後、JenkinsでCocoaPodsを含んだiOSアプリプロジェクトのビルドで署名に失敗してしまう

こんにちは、ビルド職人です。去年の今頃、このような記事を書きました。 CocoaPods 1.0にしたらこの現象が再発してしまいました。 === BUILD TARGET DZNEmptyDataSet OF PROJECT Pods WITH CONFIGURATION Release === Check dependencies Code Sign error: …

iOS 7.1.2でUIActionSheetに表示されている1番目の項目を選択しても何も実行されない

割と有名な話かもしれませんが iOS 7とiOS 8以降とでUIActionSheetの挙動が違っていたためハマりました。 Xcode 7.3.1ではすでにiOS 7はサポートされておらず、手元にiOS 7デバイスがなかったのでハマったとも言えます。挙動が掴めずに最終的にiOS 7デバイス…

SwiftでiOSデバイスに入っている楽曲データを取得する

iOSデバイス(iPhoneやiPod)に入っている楽曲データ一覧からアーティスト情報やタイトル情報を取得します。 let albumsQuery = MPMediaQuery.albumsQuery() if let albums = albumsQuery.collections { for album in albums { for song in album.items { // …

Swiftでタブバーにバッジを点灯させる/タブバーの部分に任意のUIViewを表示させる

iOSアプリでタブバーにバッヂを点灯させてみましょう。また消灯させる方法についても紹介します。 標準のバッヂはモサっとしていて嫌だと思う方もいるかもしれません。カスタマイズさせることを厭わない方向けに、タブバーの部分に任意のUIViewを表示させる…

Xcode 7でビルドしたアプリをApplication Loaderを使って申請するとInvalid Swift Supportが発生する

Jenkinsからxcodebuildを使ってipaファイルを生成します。Application Loaderを使ってipaファイルをアップロードするとInvalid Swift Supportが発生したとメールが送られてきます。 Appleから送られてくるメール Application Loaderを使ってアップロードする…

iOSでreason: 'Could not load NIB in bundle: 'の例外が発生して起動しなくなった

Xcode 6.4で開発していたアプリをXcode 7.1で起動する状態にして、数ヶ月放置してXcode 7.3でまた起動させようとしたらアプリが起動しなくなってしまった。 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could …

iOSでFacebook SDKを使ってのログインに失敗する

先日「TwitterKitを使ってのログインで失敗する」という記事を書きました。Twitterにログインするだけのコードを書くのが随分と簡単になりました。 今日はFacebookにログインする処理を書いてみましたが、やはり少しハマってしまいました。導入ドキュメント…

iOS 9でHeiti TC/SCが使えなくなっている

すこし前にHeiti SCを指定しているはずなのに意図通りフォントが表示されていないことがありました。調べてみたらiOS 9ではHeiti TC/SCが使えなくなっていることがわかりました。 フォント名 Heiti TC STHeitiTC-Light STHeitiTC-Medium Heiti SC STHeitiSC-…

Realm Swiftを使って複数の条件でソート(並べ替え)する

本記事ではRealm Swiftを使って複数条件でソートする方法を紹介します。使用しているRealm Swiftのバージョンは0.97.0です。 Realm Swiftを使って複数の条件でソート(並べ替え)する Realm Javaでの複数条件のソートしたい場合、「Realm Javaを使って複数の条…

SwiftでToday Extensionのデバイスの向きを判定する

少し前のエントリ「SwiftでToday Extensionの高さをUITableViewの高さに合わせる」で、Widgetの高さの上限値は「アプリ名のセクションを含めてWidgetが1画面で収まる高さ」と書いておきながら、デバイスを横にした時の処理を忘れていました。 下図は、現在開…

SwiftでUINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える

UINavigationControllerのナビゲーションバーを表示/非表示を動的に切り替える方法としては、UINavigationController#setNavigationBarHiddenメソッドを使います。 // ナビバーの表示を切り替える if let nv = navigationController { let hidden = !nv.navi…

SwiftでSVGKitを使ってSVG画像を表示する

SVGはベクター形式の画像フォーマットのひとつです。SVGを使ったことがなかったので調べたこともないのですが、SVGをUIImageに変換するライブラリはいくつかあるようです。 ここでは、SVGKitを使って画像を表示しました。 導入にはいつもどおりCocoaPodsを使…

Mac OSXでAppiumを使ってiOSシミュレータを起動する

インストール brewのインストール rubyのインストール nodebrewのインストール appiumのインストール rspecのインストール bundleのインストール 1.と2.はCocoaPodsを使うためにインストールされていると思います。 テストを実行してiOSシミュレータを起動す…

Xcode 7.2(iOS 9.2 SDK)を使うとUILabelが崩れたりNSAttributedString#boundingRectWithSizeで意図しない値が返ってくる

時間ができた時にコツコツと Xcode 6.4 + iOS 8.4 SDKを使って開発していたアプリをXcode 7.2でビルドが通るようにしていました。要するにSwift 1.2からSwift 2.1.1への移行です。 ある時、UICollectionViewのフッターの表示が崩れていることに気付きました…

SwiftでSDWebImageを使ってダンロードした画像を加工してUIImageViewに表示する

iOSでネットワーク上のリソースをUIImageViewに表示するライブラリに「SDWebImage」というものがあります。導入方法については以下の記事で紹介しました。 SDWebImageを使ってUIImageViewに画像を表示させるには下記のように書くことができます。 // import …

SwiftでUIColorの色を一段階暗くする

UIButtonのハイライト色を自動生成する必要がある場合などUIColorの色を一段階暗くしたいことがあります。 // 一段階暗くする var color: UIColor = UIColor.redColor() var hue : CGFloat = 0 var saturation : CGFloat = 0 var brightness : CGFloat = 0 v…

CocoaPodsを使ってEmbedded Frameworkにライブラリを追加したらiTunes Connectからリジェクトされる

CocoaPodsを使ってEmbedded Frameworkにライブラリを追加したらiTunes Connectからリジェクトされてしまった。 問題は解決していないので寝る前にメモを残しておきたいと思います。解決でき次第、追記するかもしれません。 やりたいこと jsonをダウンロード…

SwiftでもSDWebImageを導入する

SDWebImageは画像をダウンロードとダウンロードした画像のキャッシュをおこなってくれます。細かな設定があり、キャッシュ総容量であったり有効期限を指定して使うことができます。 導入にはいつもどおりCocoaPodsを使います。Podfileに下記のように記述しま…

iOSでカスタムフォントを使う

その昔、iOSアプリでカスタムフォントを使うのはそれなりに大変だった気がするのですが、Xcode 7ではInterface Builderからカスタムフォントを直接指定できるようになっていました*1。 本記事では、iOSでカスタムフォントを使う方法を紹介します。具体的には…

iOSアプリ開発の記事一覧

iOSアプリケーションの開発Tipsを紹介しています。 導入 基本的なプログラミング 文字列操作 リフレクション マルチスレッド UIKit 拡張機能・エクステンション マルチメディア 画像処理 カメラ ネットワーク デバイス/センサー データ・ストレージ Apple Wa…

SwiftでNSAttributedStringを使って文字列を装飾する(UILabelに画像を表示する)

直近でやっていたプロジェクトでNSAttributedStringに関する知識が少なくて苦労したので忘れないようにメモしておきます。 NSAttributedStringに関してはすでに色んなブログやサイトで紹介されているのでご存知の方も多いかもしれませんが文字列を装飾してく…

Swiftでシングルタップとダブルタップとロングプレス(ホールド)に同時に対応する

iOS 3.2からUIGestureRecognizerが追加されてからよく使っていたのですが、シングルタップとダブルタップ、ホールド(ロングプレス)に同時に対応します。 シングルタップとダブルタップはUITapGestureRecognizerクラスで対応することができます。ホールド(長…

Swiftで'_' is not convertible to 'StringLiteralConvertible'が発生したとき

'_' is not convertible to 'StringLiteralConvertible'が発生したとき。 var hoge = [ "duration": 0.5, "easing": "EasingInOutBounce", "transform": CGAffineTransformMakeScale(1.4, 1.4) ] var image = UIImage(named: "image_name") var hoge = [ "du…

SwiftでGrand Central Dispatch(GCD)を使った並列処理が実行される順番を調べてみた

Grand Central Dispatch(GCD)を使った並列処理が実行される順番を調べました。 やりたいこととしては、別スレッド上で処理してすべての処理が完了したらUIスレッドに終わった通知を送りたい。つまり並列処理の待ち合わせ(並列プログラミングガイド的にいえば…