酢ろぐ!

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

開発-iOS

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スレッドに終わった通知を送りたい。つまり並列処理の待ち合わせ(並列プログラミングガイド的にいえば…

SwiftでWatchKitアプリのテーブルでセルの背景の角丸をなくす/セルの背景を消す/セルにセパレーター的なものを追加する

Apple Watch*1のWatchKitアプリで実装する際によく聞かれることのひとつとしてはテーブル(WKInterfaceTable)での表現力です。WKInterfaceTableを使っているといかにUITableViewが表現力に優れているのかが分かります。 それはさておき表題のように「テーブル…

AppStoreで公開中のiPhoneアプリを取り下げる(非公開にする)方法

本記事ではAppStoreで公開しているiPhoneアプリを取り下げる方法を紹介します。 AppStoreで公開中のiPhoneアプリを取り下げる 以下の作業は2015年4月1日時点でのiTunes Connectの日本語版UIを元にしています。 iTunes Connectにログインして「マイApp」をク…

Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成してiTunes Connect(Testflight)に投げる方法

2014年にAppleがTestflightを買収してから数年経ちました。Androidのサポートが打ち切られたりして対応に追われたこともありましたが、数年経ち公式にiTunes Connectのアプリ申請プロセスに組み込まれるようになりました。 iOS 8を公開した時期から1つのバー…

Xamarin.iOSで指定したフォント名で描画する

UIFontを生成する際にUIFont.FromNameメソッドを使うことで指定したフォント名のUIFontオブジェクトを生成することが可能です。UILabelのFontプロパティに生成したUIFontオブジェクトを設定することで指定したフォントで文字列が表示されます。 指定したフォ…

iOSでマスク画像を使ってマスク処理した新しいUIImageを作る

UIImage *srcImage = [UIImage imageNamed:@"test_image"]; UIImage *dstImage = nil; UIImage *maskImage = [UIImage imageNamed:@"mask_image"]; CGImageRef m = maskImage.CGImage; CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(m), CGImageGetH…

「アプリ内課金+広告 iPhoneプログラミング」が発売されます!

秀和システムさまより「アプリ内課金+広告 iPhoneプログラミング」が発売されることとなりました。大場知悟(id:tworks)さんとの共著です。 本書は、iOSアプリのゲームやアプリで使われているアプリ内課金や広告の実装するための手引書です。iPhoneプログラミ…

9月30日に終了してしまうAdWhirlの応急処置をおこなう (iOS編)

まず最初にAdWhirlの紹介から。 iOS/Android向けのアドネットワーク(スマートフォンの広告提供元)は沢山あります。スマートフォン関連で最も賑やかな分野のひとつで、日々あるところが潰れて、またあるところが登場してきて、アドネットワーク自体の増減があ…

「Undefined symbols for architecture armv7:〜」という警告が出たときの対策方法

オープンソースのライブラリを使おうとプロジェクトに組み込むと、ビルド時に以下のような「Undefined symbols for architecture armv7:〜」というエラーが表示されてビルドに失敗することがあります。 Undefined symbols for architecture armv7: "_kCGImag…