はじめに 今回はiOS13で新たに追加された BackgroundTasks Framework について見ていきたいと思います。 基本的には、 WWDC2019動画の『Advances in App Background Execution』を見ながら実践してみました。 ですが、微妙に躓くところもあったのでメモとして残しておきたいと思います。 BackgroundTasksとは まず、 BackgroundTasks の説明です。 BackgroundTasks はiOS13から利用できる新しいFrameworkになります。 BackgroundTasks には大きく分けて下記2つのAPIが存在します。 Background Processing Tasks Background App Refresh Tasks Background Processing Tasks Backgrou
iOSアプリケーション開発 この章は、iOSアプリケーション開発にBluetooth LEを提供するCore Bluetoothフレームワークを解説します。 Core Bluetoothフレームワークは、iOSアプリケーションにBluetoot LEデバイスの発見、接続と読み書きの操作を提供します。このフレームワークが、2章で述べたBluetooth LEの通信規格や振る舞いなどの技術詳細を隠蔽して抽象化するので、アプリケーション開発者はアプリケーション開発だけに注力できます。 iOS5とiOS6で、Core Bluetothフレームワークが対応する機能が大きく異なります。iOS5は、Bluetooth LEのセントラルという役割を提供します。iOS6は、セントラルに加えてペリフェラルという役割も提供します。iOSのバージョンごとの対応を、iOS5およびiOS6のアイコンを節のタイトルに表
※ 実装/動作確認環境: Xcode 11 beta7 + iOS 13 beta 8 TL; DR iOS13 & iOS12で位置情報を「常に許可」してもらう場合、Info.plistの値を以下のようにすることで適切に説明・誘導できそう NSLocationWhenInUseUsageDescription XXXの利用には、「Appの使用中は許可」を選択してください。 NSLocationAlwaysAndWhenInUseUsageDescription XXXの利用には、「常に許可」を選択してください。 背景と概要 iOS13からは CLLocationManager.requestAlwaysAuthorization() を実行しても、「常に許可」をすぐに取得できないようになり、アラートで2度許可を取得する必要がある 詳細はWWDCの発表内容1や解説記事2 3を参照 iOS1
var locationManager = CLLocationManager() locationManager.delegate = self locationManager.requestAlwaysAuthorization() とした際に、 「常に許可」 「使用中のみ許可」 「許可しない」 の3つの選択肢を持つ確認ダイアログが表示されていました。 これがiOS13では、 「使用中のみ許可」 「一時的に許可」 「許可しない」 の3つの選択肢に変更となりました。 一見すると、アプリ開発者にとって辛い仕様に思えるのですが、「常に許可」がなくなったわけではありません。 「常に許可」を求めるタイミングが変更になった というのが正しい解釈となります。 因みに、ここで「使用中のみ許可」を選択した場合、 CLAuthorizationStatus は実は .authorizedAlways にな
Swift5がリリースされましたね。 Swift5にはABIの安定化やResult型のStandard Library追加など様々な追加・変更がありました。 次のURLにまとまった神Playgroundがあるので、みたことない人はおさらいしましょう。 https://github.com/twostraws/whats-new-in-swift-5-0 String Interpolationを使ってNSAttributedStringをラップする この中でString Interpolationという機能があります。 String Interpolationの使い方は上記Playgroundを参照してください。 このString Interpolationを使うとめちゃめちゃNSAttributedStringが便利になります。 下記にNSAttributedStringをラップしたもの
iOS App ├── Documents ├── Library │ ├── Caches │ └── Preferences └── tmp また、保存するファイルによってどこに保存をするかをガイドラインに従ってわけなければリリース申請でリジェクトされてしまう iOS Data Storage Guidelines - Apple Developer 以下リンク引用 ファイルシステムプログラミングガイド (TP40010672 0.0.0) Documents ユーザが作成したデータを保存するために使います。ファイル共有の機能により、ユーザはこのディレクトリ以下にアクセスできます。したがって、ユーザに見せても構わないファイルのみおいてください。 このディレクトリはiTunesによってバックアップされます。 Library これは、ユーザのデータファイル以外のファイル用の最上位デ
※Application_HomeはApplication Rootのこと ※tmpはシステムからのアクセスで消去されるらしいですが, タイミングがわからないので, ファイルを使用しなくなったら 自分で削除しましょう。 ではファイルはどこにおく? 通常のユーザデータ, よく利用するデータなどは, Documentsで, データのキャッシュは, /Library/Cacheで, 一時的に必要なデータは, tmpにいれます。 iCloud関連は別で… Simulatorで確認する Simulatorにおけるデータは, ~/Library/Application Support/iPhone Simulator//Applications/ に存在します。Finderでも確認できます。Libraryなんてないよという方は, で表示方法を書いておきました。 とあるアプリケーションのディレクトリを見
この記事は ドワンゴ Advent Calendar 2019 の 5 日目の記事でしたが、遅刻しました 去年の今頃はサーバサイドエンジニアとして GraphQL サーバおよびクライアントの設計・開発等 に携わっていましたが、今年の6月から iOS エンジニアとして働きはじめました。雑多な技術系のメモは普段は scrapbox に載せています。 今秋、チームのメンバー数名と iOSDC Japan 2019 に参加し、Swiftにおけるインポートとリンクの仕組みを探る を拝聴したことで今までふんわりしていたライブラリやインポート周りへの知識を深める機運が生まれたため、今回は周辺知識を改めて整理しつつ、最終的には得た知識で持って、Xcode を利用せずに手作業でライブラリの作成とビルド, 実行までを試してみよう!という記事を書いていきます。 モジュールやインポート、ライブラリについて理解しつ
Dyld Error Message: Library not loaded: /Library/Frameworks/xxx Referenced from: /Users/USER/Desktop/MyApp.app/Contents/MacOS/MyApp Reason: image not found Dyld とは dynamic loader という実行時にライブラリを読み込む機構のことです。 「ライブラリが見つからないよ」と言われているわけです。 プロジェクトに外部ライブラリを組み込んだ場合によく起こりますね。 対応方法 Linked Frameworks and Libraries を見直す General > Linked Frameworks and Libraries に該当のライブラリが設定されているか見直しましょう。 Copy Files Phase を見直す B
動機 Storyboard&Segueでの管理は便利ですが複雑なアプリを作っていくとどんどん 辛くなっていきます。例えば以下のようなケース。 ViewController間で値を引き回したい どこのページにいても指定したページに遷移がしたい(アプリ内通知やURLSchemaでの移動) 表示されているページに応じて処理を変えたい(初回登録フロー時にはxxxの通知は出さない、など) 起動時に条件(ログインしているかどうかなど)に応じて遷移を変えたい 1番はhttps://github.com/tokorom/TKRSegueOptions を使ってperformSegueを 呼ぶ場所で値を渡せるようにすれば少し綺麗になるんですが、依然として遷移先の 情報を知ってないと何を渡せばいいかが決まらず、変更に弱い作りになってしまっていました。 2番はNotificationを使って根っこのViewCo
はじめに Storyboard上でのScrollViewの実装って結構ややこしいですよね。。。 Autolayoutの設定がわからないとかAutolayoutは設定できたけどスクロールがうまくいかないとか... 初心者の方は特に躓くのではないかと思います。 そんなややこしいScrollViewの実装を簡単にできる方法を紹介したいと思います。 みなさん、ScrollViewをStoryboardで実装するときどのように実装していますか? ScrollViewのContentViewにUIViewを置いていませんか? ScrollViewの実装の仕方を調べると大抵の記事はcontentViewにUIViewを置いているのではないかと思います。 UIViewを置くことは間違いではないのですが、このUIViewをStackViewに置き換えることで簡単に実装することができレイアウトの変更に強くなり
iOSに限らず、アプリ開発においてAPIのURLやアクセスキーといった環境変数を開発用ビルドとリリース用ビルドで切り替えられるようにしておくことは重要です。 XCodeでこれを実現する方法にはいくつかの選択肢があると思います。 本記事では、今のところ私がシンプルで良いと思っているやり方をご紹介したいと思います。 環境変数を切り替える ここでは開発用ビルドとリリース用ビルドでAPIのURLを切り替えることを例とします。 Configuration XCodeではアプリのビルド設定はConfigurationと呼ばれており、デフォルトではDebugとReleaseの2つが作成されています。 基本的にアプリの開発中はDebugを使用します。 XCodeメニューからProduct > Scheme > Edit Scheme...を開くと、ビルド設定としてDebugが指定されていることがわかります
はじめに 先日,自作のSwift用のN次元行列演算ライブラリMatftを公開しました(記事,github).それにあたって,Matftのような自作ライブラリをXcodeで作成し,公開するまでの一連の流れをまとめたいと思います. 1. 作業用ディレクトリ 1.1 作業用ディレクトリの作成 Xcodeを開き,File > New > Swift Packageでライブラリ用のディレクトリを作成します.既存のディレクトリをライブラリとして公開するには,後述のPackage.swiftファイルを自分で作成すれば良いです. 今回は例として,Animalという名のライブラリを作成します. すると以下のような画面になり,Animalディレクトリが作成されると思います. 1.2 構成とその役割 ↑でAnimalディレクトリが作成されると,その直下のディレクトリの構成はこのようになります. ├── Pack
フロントエンド front end バックエンド back end アプリ開発 app インフラ infra その他 other データドリブン data driven タグ一覧 Ajax(1) Android(20) Apache(2) AR(2) benchmark(1) BigQuery(2) browsersync(1) C4(1) CakePHP(1) CentOS7(1) CI(1) CMS(3) CoreNFC(1) CraftAR(1) CSS(1) DeepLab(2) Dmitry Stogov(1) ECMAScript(1) ECMAScript6(1) ElePHPant(1) Facebook(3) FFmpeg(1) firebase(1) fluentd(1) Framework(1) GD(2) gif(2) Git(1) GLSL(5) Google A
さよなら、NSURLConnection第2弾は、NSURLSessionで”PUT”or”POST”です。 ファイルをアップロードするとなると、 最低限 IDとPasswordぐらいのBASIC認証はつきものBASIC認証の機能もつけちゃいます。 Xcode 7 beta5 iOS9 Beta5 Objective-C (swiftは体が拒絶反応中) 通信の準備 今回のソースコードは、アプリのtmpディレクトリー内にある test.zipを読み込みサーバーへ”PUT”です。 test.zipファイルの読み込み tmpディレクトリーからファイル”test.zip”をNSDataで読み込み長さを取得 // tmpディレクトリ取得 NSString *tmpPath = NSTemporaryDirectory(); // 読み込みファイルフルパス作成 NSString *fileFullPa
WKNavigationDelegate の - webView:didReceiveAuthenticationChallenge:completionHandler: や、 NSURLSessionDelegate の URLSession:didReceiveChallenge:completionHandler: 、 そして NSURLConnectionDelegate の - connection:didReceiveAuthenticationChallenge: (Deprecated) の取り扱いを解説します。 認証の種類は NSURLProtectionSpace Authentication Methods に定義されているので、これらの定義が何を表すか、そして認証時にデリゲートではそれぞれどのような手続きが必要か調べました。Read less
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く