- 投稿日:2019-10-28T20:45:09+09:00
【Swiftビルドエラー解決】This app could not be installed at this time.
はじめに
よおXcodeにハマった王国騎士ロボットVTuberのKoshiだ?? (@Koshi_VTuber)
macOS Mojave
Xcode Version 11.1 (11A1027)問題
ビルドした時、このような画面が出て、Simulator上でアプリを起動できなかった。
This app could not be installed at this time.
現在、このアプリをインストールできませんでした。???
DetalesをクリックFailure Reason: Could not install at this time.
失敗の理由:現時点ではインストールできませんでした。Recovery Suggestion: Could not hardlink copy
回復の提案:コピーをハードリンクできませんでした??????
試したこと
Xcodeでビルドしようとしたら "This app could not be installed at this time." というエラーが出て失敗する状態からの脱出
altを押しながらproduct > clean build Folder
×だめ。
解決法
シミュレーターをリセットする。
Simulatorを起動し、
Hardware -> Erase All content and settings...
プロジェクトをクリーンアップします。shift+ cmd+K
shift+ opt+ cmd+Kこれで問題が解決するはずが、
おかしい
仕方なくlogを覗く
〜/ Library / Logs / CoreSimulator /
の中にある。Simulator.log
Oct 28 20:15:39 AnoMacBook-Pro Simulator[629] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:22:32 AnoMacBook-Pro Simulator[982] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:25:49 AnoMacBook-Pro Simulator[1222] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:26:27 AnoMacBook-Pro Simulator[1222] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:27:05 AnoMacBook-Pro Simulator[1509] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:28:12 AnoMacBook-Pro Simulator[1783] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:48:14 AnoMacBook-Pro Simulator[1932] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:50:09 AnoMacBook-Pro Simulator[2143] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:50:15 AnoMacBook-Pro Simulator[2143] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:55:23 AnoMacBook-Pro Simulator[2323] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:59:54 AnoMacBook-Pro Simulator[2672] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 21:04:12 AnoMacBook-Pro Simulator[2672] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
デバイス188C898E-AE35-4F8F-8325-E85EA93E7E66のペーストボードが接続を失いました。??
まとめると
デバイスにアプリが正しく接続されていないらしい
⚔これで解決しましたこ
Xcode 8.3.2 : Could not hardlink copy
1. Xcodeをシャットダウン。
2. Simulator: Hardware > option押しながら、 Erase All Content and Setteings...
3.Erase
4. Simulatorをシャットダウン。
5. Xcodeを再起動&ビルド
無事解決です...!
†■━ †■━ †■━ †■━ †■━ †■━ †■━
もし、この記事が役に立ったら、
「いいね」「ストック」
押してね??以上、Unityゲーム王国騎士ロボットVTuber Koshiがお送りしました!
私のステータスだ⚔共にこの世界を救おう
Twitter⚔ twitter.com/Koshi_Vtuber
YouTube⚔ t.co/I9eMMgpS8P?amp=1
niconico⚔ nicovideo.jp/user/90553212
bilibili⚔ space.bilibili.com/476988586
公式HP⚔ koshi-4092b.firebaseapp.com【参考】
Xcode: “This app could not be installed at this time.”
https://stackoverflow.com/questions/47760643/xcode-this-app-could-not-be-installed-at-this-timeThis app could not be installed at this time. のエラー対応
" class="autolink">http://koze.hatenablog.jp/entry/2019/04/15/090000">Xcode 8.3.2 : Could not hardlink copy
https://stackoverflow.com/questions/44649039/xcode-8-3-2-could-not-hardlink-copy
- 投稿日:2019-10-28T20:45:09+09:00
【Swiftビルドエラー未解決】This app could not be installed at this time.
はじめに
よおXcodeにハマった王国騎士ロボットVTuberのKoshiだ?? (@Koshi_VTuber)
macOS Mojave
Xcode Version 11.1 (11A1027)問題
ビルドした時、このような画面が出て、Simulator上でアプリを起動できなかった。
This app could not be installed at this time.
現在、このアプリをインストールできませんでした。???
Detalesをクリック??????
試したこと
Xcodeでビルドしようとしたら "This app could not be installed at this time." というエラーが出て失敗する状態からの脱出
altを押しながらproduct > clean build Folder
×だめ。
解決法
シミュレーターをリセットする。
Simulatorを起動し、
Hardware -> Erase All content and settings...
プロジェクトをクリーンアップします。shift+ cmd+K
shift+ opt+ cmd+Kこれで問題が解決するはずが、
おかしい
仕方なくlogを覗く
〜/ Library / Logs / CoreSimulator /
の中にある。Simulator.log
Oct 28 20:15:39 AnoMacBook-Pro Simulator[629] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:22:32 AnoMacBook-Pro Simulator[982] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:25:49 AnoMacBook-Pro Simulator[1222] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:26:27 AnoMacBook-Pro Simulator[1222] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:27:05 AnoMacBook-Pro Simulator[1509] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:28:12 AnoMacBook-Pro Simulator[1783] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:48:14 AnoMacBook-Pro Simulator[1932] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:50:09 AnoMacBook-Pro Simulator[2143] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:50:15 AnoMacBook-Pro Simulator[2143] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:55:23 AnoMacBook-Pro Simulator[2323] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 20:59:54 AnoMacBook-Pro Simulator[2672] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Oct 28 21:04:12 AnoMacBook-Pro Simulator[2672] <Error>: Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
Pasteboard for device 188C898E-AE35-4F8F-8325-E85EA93E7E66 lost connection
デバイス188C898E-AE35-4F8F-8325-E85EA93E7E66のペーストボードが接続を失いました。画像がリンクされていないってこと?
画像をリンクし直す。以上、Unityゲーム王国騎士ロボットVTuber Koshiがお送りしました!
私のステータスだ⚔共にこの世界を救おう
Twitter⚔ twitter.com/Koshi_Vtuber
YouTube⚔ t.co/I9eMMgpS8P?amp=1
niconico⚔ nicovideo.jp/user/90553212
bilibili⚔ space.bilibili.com/476988586
公式HP⚔ koshi-4092b.firebaseapp.com【参考】
Xcode: “This app could not be installed at this time.”
https://stackoverflow.com/questions/47760643/xcode-this-app-could-not-be-installed-at-this-timeThis app could not be installed at this time. のエラー対応
" class="autolink">http://koze.hatenablog.jp/entry/2019/04/15/090000">
- 投稿日:2019-10-28T17:56:38+09:00
【実践編: 内側の2つの円】iOSでVIPERとClean Architecture 円の内側から作る
前回の記事の続きのVIPER Clean Architectureの実践編である。
この記事では内側の2つの円の部分まで作成する。今回カバーする部分はとても簡単なのでほとんどの人が問題なく読み進められると思う。
今回作るのは以下の図解の 真ん中の2つの円、EntitiesとUse Cases の部分だ。これを円の内側から順番に作っていく。
The Clean Architecture by Robert C. Martin (Uncle Bob)
なぜ内側から作るのか?
内側から実装するにのには理由がある。
1. 実装しやすい
円の内側は依存のもっとも深部であり、その先に依存する部分がない。依存する先がないとうことは、依存部分のStubを作ったり、その部分がどうなるかを一切想定しなくても作れるということだ。
2. 作る物の本質がわかる
円の内側は本質的に表現したいことであり、抽象的である。UIの表現に惑わされず本質的に何を作ろうとしているかがわかり、理解を促進する。
3. 実践に近い
実際に開発をする場合、最終的に表現されるUIの部分は、最後まで固まらないことが多い。しかし本質的に何を表現するかは、比較的初期に決まり大きく変化しないことが多い。
例えばユーザーの一覧を表示する画面を作成する時、User Entityを作成し、それをAPI経由でlistとして取ってきて、List状に表示するということは初期に確定するだろう。
しかし実際のUIで具体的にどう表現をするかは最後までわからなかったり途中で変わったりする可能性が高い。
例えばUserをListとして表示する場合、
- TableView
- CollectionView
- PageView(各ページに1ユーザーを表示)
のような複数の実装方法が想定可能である。
もしMVC設計して実際のCell等に直接Userを渡して情報を表示させるような設計をした場合、Clean Architectureで分割されている全てのコンポーネントのコードがViewControllerを中心に密接に繋がってしまい、UI変更のコードへのインパクトはClean Architectureで設計した場合と比べ大分大きくなってしまう可能性がある。
作るシステムの概要
Userの一覧を取ってきて表示するという単純なシステムを作成する。
FrameworkとフォルダのGroup分け
VIPERやClean Architectureの恩恵を最大限に受けるためには、それぞれのコンポーネントをしっかりFrameworkとして分けることが重要だ。
これにより、依存関係の理解が促進されたり、間違った実装をしてしまうリスクを大きく減らせる。
さらに、1つの画面の開発をUI部分やロジックの部分と複数人で分業しての開発もやりやすくなる。
Group構造とClean Architectureの円を一致させる
Xcode上でRoot配下のGroupは全てClean Architectureの一つの円を表すようにする。
各Frameworkとその配下のディレクトリ構造は、Xcode上と基本的には一致させる。
しかし一部Clean Architectureの円の構造を表現するためにXcode上でGroupはあるが実態としてのフォルダは作成しない部分がある。具体的にはFrameworkは全てRoot直下に実際のディレクトリを作成する。各Framework配下のディレクトリ構造も基本的にはXcodeのGroupと一致させる。
ただしClean Architectureの外側2つの円は、円の中に複数のFrameworkがあるため、この部分はXcode上ではGroupを作成するが実際のディレクトリは作成しない。さらにこの配下にあるGroupは実際のディレクトリを持つ。
最後にClean Architectureの図解の外側にもう一つ円を追加する。
最終完成形
この記事ではカバーしていない部分も含め全てが完成した場合、このような構造になる。
- Outer Circle(without folder)
- App Name(framework)
- Application(without folder)
- Routers
- Settings(framework)
- View(framework)
- Interface Adopter(without folder)
- Presenter(framework)
- Gateway(framework)
- Use Case(framework)
- Request Base
- Interactors
- Entity(framework)
- Entities
今回の記事で作る部分
実際今回の記事でカバーするのは以下の部分のみだ。
- Use Case(framework)
- Interactors
- Entity(framework)
- Entities
実装準備
もっとも内側のEntityの円の部分を作成し始める前に、事前準備として、Xcodeのプロジェクト作成直後にできたメインのTargetの部分を一番円の外側に作成するもう一つの円の部分を表現するようなXcodeのグループ構成にする。
今回は UserManager という名称のXcodeプロジェクトを作成する。
作成直後、Groupを以下のような構造にする。
- Outer Circle(without folder: 新たに追加)
- UserManager(最初から存在するものを移動)
- Application(without folder: AppDelegateやInfo.plistなど自動生成ファイルを入れておく)
最初の円: Entity
Frameworkとファイルの配置
最初の円であるEntityのFrameworkを作成し、その配下にEntitiesディレクトリを作成。
そこにUser.swiftのファイルを配置する。
- Outer Circle(without folder: 新たに追加)
- UserManager(最初から存在するものを移動)
- Entity
- Entities
- User.swift
User Entity
User Entityは以下のようになる。
User.swiftpublic struct User { public let id: Int public let name: String public init(name: String, id: Int) { self.id = id self.name = name } }何の変哲もない実装だが、重要なのはUser Entityそのものが他のどのFrameworkにも依存していないとうことだ。
実際にUser structが他のどのFrameworkへもアクセスしていないと同時に、EntityのFrameworkのTargetのFrameworks and Librariesの部分で何もImportしないことでそこを確約する。
2つ目の円: Use Cases
Frameworkとファイルの配置
UseCase Frameworkを追加し後述の図解の通りのGroup構造を作成する。
- Outer Circle(without folder)
- UserManager
- Application(without folder)
- UseCase
- Interactors(New!)
- UserListInteractor.swift(New!)
- Entity
- Entities
- User.swift
さらにUseCaseからはEntityへの参照が必須なのでUseCaseのTargetの部分のFrameworks and LibrariesでEntityをインポートする。
Usecase Interactor
ここで追加したUserListInteractorが今回この層で実装するInteractorだ。
UserListInteractor.swiftimport Entity public class UserListInteractor { var users: [User] = [] }UserListInteractorはEntityをimportしてUser Entityを直接参照しており、UserListInteractorはEntityに依存していることがわかる。
さてUserListInteractorはどうやってUserの一覧を取ってくれば良いのだろうか?ここでGatewayが登場する。Gatewayに関しては次回の記事で扱う。
まとめ
今回は非常に単純な例だったが、Entityが分離されているだけでも実際大きな恩恵を受けられる。小さなプロジェクトの場合はEntityだけを分離してそのほかの部分は一つ外側の円に全て入れるようなミニマムなFramework分けでもいいかもしれない。
次回はいよいよVIPER, Clean Architectureの重要かつ比較的難しい部分のより外側の実装に移っていく。
- 投稿日:2019-10-28T16:58:54+09:00
Swift開発メモ
swift rename サイト
https://www.youtube.com/watch?v=jRnVjtNLLLk
- 投稿日:2019-10-28T12:51:19+09:00
[iOS13] 既存アプリのiOS13対応でハマったこと(現在進行形)
既存アプリのiOS13対応。楽勝かと思ったらアンドキュメントな罠が。。。
現在進行形な既存アプリのiOS13対応で、アンドキュメントな変更によりはまったところを、同じ状況な人のために残しておきます。
CoreBluetooth Peripheralの取れるタイミング
今までは、
objective-c_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];の後に、
objective-c[_centralManager retrievePeripheralsWithIdentifiers:identifiers];で取れたんですが、(いや、実際には、取れるとは限らないんですが)
iOS13になってからは、ちゃんと- (void)centralManagerDidUpdateState:(CBCentralManager *)central;のイベントが通ってからでないと、ペリフェラル一覧が取得できなくなりました。
いや、そもそも前からそう書くのが正解のはずなんですが、僕のところに回されてきたプロジェクトの元のコードが、、、げふん参考 https://www.jenx.si/2019/10/02/changed-bluetooth-initialization-on-ios13/
Settings.bundle 同名グループはダメ
これも暗黙のルールだったんでしょうが、、、
[iOS13] Settings.bundleのグループ名が重複すると設定アプリの内容が正しく設定されない画面横向き(Landscape)の時はステータスバーを表示できない。
当然、prefersStatusBarHidden をセットしたり、info.plistで設定したり、古い書き方のAppDelegateで設定したり、回転時に表示させようとしたり、色々やってるんですが、横向き時にステータスバーを表示させることができません。Appleのdeveloper forumなんかでも同様の報告がありますが、現状最新ベータ版でも直ってません。うーむ、、、
モーダル表示画面の親。viewWillApearが呼ばれない。
モーダルビューの表示方法のデフォルトが変更された件で、みなさん「フルスクリーンに設定して表示の変更を回避」ってやってると思うので気がついてないと思いますが、裏に画面が見えてるということは、モーダル画面を閉じた時に親の「ViewWillApear」が呼ばれないのです。フルスクリーンにしない人は気を付けましょう。
以上、後半は昼休み終わりかけてダレたので、スクショもコードもありませんが!
- 投稿日:2019-10-28T11:06:10+09:00
今更だけど Swift で Extensions を使って型を拡張してみる
はじめに
Extensions によって、型を拡張することができます
https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
2つサンプルを書いてみたので備忘録として載せますString型でIntチェックできるように拡張
// String+checker.swift import Foundation extension String { /// "1" // true /// "Hello world" // false /// "" // false var isInt: Bool { return Int(self) != nil } } let hogeNumber: Int = 0 hogeNumber.isInt // trueURL型でパラメータを受け取れるように拡張
// URL+parameters.swift import Foundation /// URL型を拡張します extension URL { /// 指定したURLクエリパラメーターの値を取得する /// - Parameter key: URLクエリパラメーターのキー /// - Returns: 指定したURLクエリパラメーターの値(存在しない場合はnil) func queryValue(for key: String) -> String? { let queryItems = URLComponents(string: absoluteString)?.queryItems return queryItems?.filter { $0.name == key }.compactMap { $0.value }.first } } http://nananana/hahahaha?param_id=5 let id = URL(string: url.absoluteString)?.queryValue(for: "param_id") NGLog(id) // 5
- 投稿日:2019-10-28T09:39:29+09:00
ipa作成時に「IPA processing failed」と出た
概要
Xcode11、iOS13に対応したアプリのipaファイルを作成しようとすると
タイトル通り、「IPA processing failed」というエラーが出てipaファイルが作成できなかったので
調べて対処したのでメモ。対処法
左下にある Show Logsからフォルダを開くと下のようなlogファイルがあると思います。そこから「IDEDistribution.standard.log」を開くことで今回のエラー内容が確認することができます。
今回、私の場合だと、Rswiftにシュミレータアーキテクチャが含まれていたことが原因でipaファイルを作成できなかったみたいなので、こちらを参考にアーキテクチャを削除することでipaを作成できるようになりました。(※シミュレータアーキテクチャを削除するとシミュレータでアプリ起動ができなくなるので注意が必要です。)
まとめ
最初は原因がわからず、参考記事も見当たらずどうしようかと思いましたが、
よくよく考えればLogを見ろよって感じでした。参考にした記事











