酢ろぐ!

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

開発-iOS

In-Houseバイナリに変更した途端プッシュ通知が送れなくなったので問題を切り分けた

諸事情があって、Apple Developer ProgramなアカウントAで作成していたAd-Hocアプリを、Apple Developer Enterprise ProgramなアカウントBで作り直すことになりました*1。 作り直すといっても署名関係だけの問題で、すんなりとProvisioning Profileを変えて …

UIImageViewやUIButtonのbackgroundImageに特定の画像を設定するとなぜか間延びして表示されていた

特定の画像をUIImageViewやUIButtonで表示させると一部分を伸ばして表示したような……9patchみたいな表示がされていた。Images.xcassetsから特定の画像を削除して、再度追加したところ問題は発生しなくなった。 gitで差分を確認するとImages.xcassets/button_…

iOSでジオフェンス機能を実装する

「目的地に近づいたよー」的なことができるのがジオフェンス機能です。アプリを閉じていても反応するのでとても便利と聞いたので実装してみました。 LocationManagerで位置情報を取得する ジオフェンス機能を実装する コード アプリが起動していなくても処理…

(未解決)UINavigationBarで大きなタイトルを使っている時にスクロールさせると稀に画面タッチができなくなる問題

iOS 11から大きなタイトルが使えるようになりました。 UINavigationBarの大きなタイトルを使っている時に、UITableViewをスクロールさせると稀に画面タッチができなくなる問題が発生しています。発生確率はかなり低くて何が原因で発生するのかがわかっていま…

UIViewControllerを使っている場合にUINavigationBarの大きいタイトルが小さくならない/追従しない

久しぶりにiOSネタを投稿するような気がします。iOS 11からUINavigationBarに大きいタイトルが追加されました。 テーブルビューをスクロールさせた時に自動的に小さいタイトルに切り替わって欲しいので、largeTitleDisplayModeに.automaticを設定しています…

UITabBarでタブの文字を消して画像だけを表示したい

久しぶりに汎用的なネタが書けそうです。本記事ではUITabBarのUITabBarItemの文字を消して画像だけを表示する方法を紹介します。 UITabBarで文字を消して画像だけを表示したい デザインガイドラインでは、通常タブバーはアイコンと項目名とをセットにして扱…

iOSでCIFilterを使ってバーコードを生成する

iOS/AndroidアプリでCode128のバーコードを生成する必要がでてきました。iOS 8.0くらいから標準APIだけで二次元コードの読み取りと生成ができるようになっていたようです。 昔からバーコード生成といえばZXingみたいなところがありましたよね。遡って調べて…

iOS向けAd-Hocビルドバイナリを「インストールできない」と言われた時の対処方法

僕の頭の中でいつも悩むことを明文化してみました。まだ体系化できていないし検証が必要なものも多いです。不足があったり対処方法が間違っているかもしれませんので、その時は教えてくださると嬉しいです。 そもそもUDIDが間違っているかもしれないケース U…

Ad-Hocビルド時に連続したFで始まっているUDIDを貰ったときに気をつけたいこと

久しぶりにXcodeビルドマンとして活動していました。 少し前までは、In-Houseなバイナリばかりビルドしていたので特に意識していなかったのですが、最近Ad-Hocなバイナリをビルドする機会が増えてきました。色んな方のUDIDを頂いてApple Developer Centerに…

Xcode 9 GM SeedでJenkinsのビルドに失敗する

Xcode 9 GM SeedでIn-HouseなアプリをJenkinsでビルドさせるときにエラーが発生しました。 Xcode 9 GM SeedでJenkinsのビルドに失敗するようになってしまった Jenkinsのコンソールログを見ると、Archiveには成功しているけれどExportに失敗しているログでし…

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける現象が発生しました。 iPhoneでは互換性を保つための仕組みがあって、例えばiPhone 5が登場した時にアプリを起動すると上下の黒帯が入る現象がありました。4.7インチRetinaディスプレイに対応さ…

Xcode 9 GMでCarthageを使ってインストールしたRealmがビルドエラーになる

Xcode 9 GMをインストールしました。 ikatomo2をビルドしようと試みました。Realmを使っているのですがRealmの部分で下記のようなエラーが発生しました。 /MY_APP/db/Database.swift:10:8: Module compiled with Swift 3.1 cannot be imported in Swift 3.2:…

Xcode 9 GM Seedでcarthage updateを実行したらエラーが発生した

Xcode 9 GMをインストールして、carthage updateを実行したらエラーが発生した。 $ carthage update Carthage requires git 2.3.0 or later. 先に結論を書くと、原因はXcode.appのパッケージの名前を変更していたからでした。 Xcode 9 GMをXcode.appとしてま…

CocoaPodsでインストールしたRealmをCartageで管理するように変更する

もうかれこれRealmを使い出して、はや2年半くらいになります。 Realmは大きなライブラリなのでビルドする度にとても時間がかかっていました。ビルド1回終わるのに7〜8分かかってしまいます*1。 その都度ブーブー言ってたわけなんですけれど、ようやく重い腰…

iOSでGoogle AdMobの動画リワード広告を表示する

久しぶりにAdMobを試しています。たまにゲームなどで動画広告を見ると報酬が貰える実装がありますよね。動画リワード広告と呼ぶらしいです。 Google AdMobの動画リワード広告を表示する import UIKit import GoogleMobileAds class TableViewController: UIT…

BrightFuturesで非同期処理実行後にクラッシュしてしまう

メモ。 BrightFuturesで非同期処理実行後にクラッシュしてしまう不具合があった。原因がわからず数回試行してみて、下記のメッセージ部分でクラッシュしていることがわかった。 Attempted to completed an Async that is already completed. This could beco…

SwiftでUIView.beginAnimations(_: context:)〜UIView.commitAnimations()でアニメーションした場合のアニメーション終了時のイベントを取得する

UIView.beginAnimations(_: context:)〜UIView.commitAnimations()でアニメーションした場合のアニメーション終了時のイベントを取得したいと思いました。 Objective-Cを使った場合には対応方法がよく紹介されているのですが、Swift 3.1を使った書き方が調べ…

iOSシミュレータで磨りガラスが灰色で表示されてしまう

かなり昔のできごとで、ikatomoの開発途中で詰まったときの話です。はてなブログの下書きに残り続けていたので投稿しちゃいます。 すりガラスが灰色で表示されてしまう… フレンド詳細画面では名前の背景が磨りガラスになっていて、下方向にスクロールすると…

Share Extensionの実装でハマったところ

天どん v1.0の頃にいただいた「Safariからの共有したい」という要望に対応するためにShare Extensionを実装しました。ikatomoでToday Extensionの実装はしたことはありましたが、Share Extensionを実装するのは今回が初めてでした。 Share Extensionというの…

iOSアプリの戻るボタンをカスタマイズしているとUINavigationController#pushViewControllerで遷移しなくなる

数年前から開発しているアプリで謎の不具合が発生していました。「ときどきボタンを押してもフリーズしたようになって画面遷移しない」というものでした。 再現性がものすごく低くてほとんど発生しないことからスルーされてきました。つい先日、ほぼ100%再現…

(未解決)iOS 10.3.1にアップデートした一部の端末でIn-House/Ad-Hocバイナリがインストールできない

未解決案件。何かわかり次第、追記します。 環境について Xcode 8.3.1でビルドしたIn-House/Ad-Hocバイナリ アプリの配布場所は AWS S3に配置 (https) 現象について ビルドしたipaファイルとダウンロード用のplistをS3にアップロードしています。 ダウンロー…

ipaファイルを再署名(resign)する

現在出力しているipaファイルを新しいProvisioning Profileを使って再署名することができます。 利用用途としては、新しいIPAファイルは作成したくないがProvisioning Profileが失効してしまったり対応するUDIDが増えた時に、Provisioning Profileのみを入れ…

Xcode 8.3.1でAutomatically manage signingが有効になっているプロジェクトの場合にipaファイルが出力できない

Xcode 8.3以降でAutomatically manage signingが有効になっているプロジェクトで、コマンドライン(xcodebuild)を使ってipaファイルを作成することができず、途中でビルドエラーが発生してしまう問題にぶち当たりました。 個人的な感想としては、Xcode 8.3でx…

iPhoneシミュレータが起動できなくなった

Xcode 8.3.1でiPhoneシミュレータを起動させようとすると、画面が真っ暗なまま下図のようなエラーダイアログが表示されました。 エラーメッセージの内容。 Unable to boot device because it cannot be located on disk. Use the device manager in Xcode or…

Xcode 8.3でxcrun PackageApplicationが使えなくなってしまったので対策しました

開発中のアプリはMac miniを使ってJenkinsでビルドしています。Xcode 8.3.1がリリースされたことだし、古いバージョンのXcodeを削除してXcode 8.3をインストールしました。Xcode 8.3.1をインストールしていないのは現時点でダウンロードサイトに登録されてい…

NSTextAttachmentが含まれているNSAttributedStringでは行間をあけることができない

UILabelで「画像+複数行のテキスト」を実装したいが、行間の調整をすることができず頭を抱えていました。ミニマムコードで現象が再現するのか、このエントリを書きながら調査ました。 結論を先に書くと、NSTextAttachmentにもlineSpacingを設定する必要があ…

UIScrollView#scrollViewDidZoomが呼ばれなくなった

Swift 1.xの頃からメンテしているアプリがあって、コンテンツのアップデートを兼ねてSwift 3に更新しました。いきなりSwift 3に上げたのではなくて一応Swift 2.3からのアップデートになります。 そのアプリの、とある画面でズームイン・ズームアウトする機能…

Swiftで角丸・背景透過・枠線のボタンを作る

メモするまでもないかもしれないけれど、こんな感じのボタンを作った。 Swiftで角丸背景透過枠線のみのボタンを作る カスタムviewを使った。 import UIKit class MyRoundButton : UIButton { override func awakeFromNib() { super.awakeFromNib() setTitleC…

iOSのAutoLayoutで複数行テキストのボタンが正しく改行されない

複数行テキストのボタンをAutoLayoutで配置したら、テキスト量によって改行するボタンを作りたかったんだけど、ハマってしまって改行してくれないボタンになってしまった。 作りとしては、UITableViewに改行ボタンを配置したカスタムセルを表示しているだけ…

iOSアプリでFirebase.Storageから画像をダウンロードする

前回の続きから。 let imageKey = "" let storageRef = FIRStorage.storage().reference(forURL: "gs://appname-xxx.appspot.com") let imageRef = storageRef.child(imageKey) imageRef.data(withMaxSize: 2 * 1024 * 1024, completion: { (data, error) in…