- 1. Xcode No such module ‘ライブラリ名’エラーの処方箋
- 2. [iOS]viewDidLoad、viewWillAppear, viewDidLayoutSubviewsでview.frame.sizeの値が実際と異なる値が返される。
- 3. 本当にリリースできるの?FlutterでQiitaアプリを作った話。
- 4. BuildOptions.SymlinkLibraries
- 5. RealityKitのサンプルコード集「RealityKit-Sampler」
- 6. 【iOS15】 Safari拡張をリリースしてみての感想
- 7. 【Swift】入力された郵便番号と都道府県が正しい情報か確認する
- 8. 【Swift】郵便番号が実在するかしないか確認するバリデーション
- 9. シミュレータの動画を撮影したい時のメモ
- 10. 最初のアプリを作る方法
- 11. React Native + Expoで(iOS,Android)開発環境を構築する
- 12. Xcode 実機にアプリアイコンが反映されない時
- 13. Swift Package Managerでライブラリを自作して使うまでの最初の一歩
- 14. 【Swift】読みやすいコードを書くためのコーディングルール(基本編)
- 15. Swift URLで、日本語URLに対応する
- 16. Core Dataでの書き込み時にnewBackgroundContextに対する命令はperform/performAndWait内でないといけない
- 17. Core DataのEntityが持つAttributesの初期値は基本GUIで設定して必要だったらawakeFromInsertで記載する
- 18. M1 MacでiOSアプリをXcodeから走らせる
- 19. Swiftの@unknown defaultを理解する
- 20. 【Swift】入力フォームで入力金額から手数料を引いた額を自動算出して表示
Xcode No such module ‘ライブラリ名’エラーの処方箋
##今回発生したエラー
xcodeをよく使っている人なら遭遇したことがあると思います。
自分も重いリポジトリをクローンした際の読み込み時によく出会します。
普段ならCleanすれば解決できることが多いですが、今回のはできなく他の記事にも書かれていなかったのでケーススタディとして共有します。
![スクリーンショット 2021-10-21 16.18.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/6fae9d13-d6cd-27d2-0448-e3681a9c7db4.png)
なんとも簡単そうなエラーメッセージですが原因はいくつかあり、それら一つずつ試していくしかありません。##対処法
これはその名の通りモジュールの読み込みが正常に行かなかった時に発生します。
対処法は他の記事でも同じく記載がありますがいくつかあります。**①CleanBuildFolder(Productタブ > CleanBuildFolder)**
**②DrivedDataの削除(自分はこれで解決し
[iOS]viewDidLoad、viewWillAppear, viewDidLayoutSubviewsでview.frame.sizeの値が実際と異なる値が返される。
上記時点でレイアウトが終了していないため実際の値と異なる値が返される場合がある。
`self.view.setNeedsLayout()`と`self.view.layoutIfNeeded()`を呼ぶとレイアウトが直ちに行われるので、以降は正しい値が取れるようになるはずである。“`swift:ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()self.view.setNeedsLayout()
self.view.layoutIfNeeded()
let size = self.view.frame.size//正しい値が取れるはず
}“`
参考 [How to get correct size or bounds of UIView in Swift 2.0?](https://stackoverflow.com/questions/38452979/how-to-get-cor
本当にリリースできるの?FlutterでQiitaアプリを作った話。
![poster_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678085/27dcb69c-c257-7add-27aa-0a723fe70ada.png)
## はじめに
昨年の春先からFlutterを触り始めて、状態管理シリーズの記事や「Dart vs Swift」の翻訳を出してきたが、いつかFlutterで自作アプリを出したいとの思いが強くなり、今回のQiitaアプリに至りました。####ダウンロード先
▼iOS
https://apps.apple.com/jp/app/open-qiita/id1590830106▼Android
https://play.google.com/store/apps/details?id=com.jamestong.open_qiita## Open Qiitaの技術要素
– 状態管理
グローバル状態、例えば記事本文の文字サイズ変更、テーマカラーの変更は**BLoC** + **Equatable**;
特定イベントの状態あるいは通知
BuildOptions.SymlinkLibraries
[シンボリックリンク](https://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html)
“`
シンボリックリンクとは、
オペレーティングシステム(OS)のファイルシステムの機能の一つで、
特定のファイルやディレクトリを指し示す別のファイルを作成し、
それを通じて本体を参照できるようにする仕組み
“`UnityからiOSビルド時にBuildOptionsの指定で簡単に設定できる
https://docs.unity3d.com/ja/current/ScriptReference/BuildOptions.SymlinkLibraries.html
RealityKitのサンプルコード集「RealityKit-Sampler」
RealityKitのサンプル集「RealityKit-Sampler」をオープンソースで公開しました。
RealityKitはAppleの最新のARフレームワークです。[RealityKit-Sampler](https://github.com/john-rocky/RealityKit-Sampler)
[](https://github.com/john-rocky/RealityKit-Sampler)ソースコードは GitHub に置いてあるので、ご自由にご活用ください。
https://github.com/john-rocky/RealityKit-Sampler
シンプルにRealityKitを操作する公式サンプルがあまりないの
【iOS15】 Safari拡張をリリースしてみての感想
#はじめに
iOS15からMacと同じようにSafari拡張機能が使えるようになりました。WWDC2021でも取り上げられ、Xcode13にも専用のプロジェクトテンプレートが用意されるなど、結構気合の入っている印象です。とはいっても、まだまだ日本語の情報が少なかったので今回はアプリを作ってみた立場から、開発に役立ちそうなことをまとめていきたいと思います。#つくったもの
https://apps.apple.com/jp/app/禁欲フィルタ-継続できるアプリ/id1589931500
作ったものはこちらです。性的に過激なサイトや単語をブロックしてくれるアプリになっています。実際の画面は以下の画像のようになっています。この画像では配慮のため英語を対象としていますが、もちろん日本語にも対応しています。
![過激な単語.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/6ad4e2f7-8646-19a9-be7d-ecaf03d8ce03.jpeg)
スマホで画面キャプチャをする際など
【Swift】入力された郵便番号と都道府県が正しい情報か確認する
iOSアプリなどで住所を入力してもらう際に、郵便番号と都道府県が一致しているか確認する際のコード。
コードはあまり美しくありませんがご了承ください。
CLGeocoderを使って郵便番号から都道府県を出力させ、入力値との相違を確かめるのですが、CLGeocoderから出力される都道府県名はローマ字。
そこでCLGeocoderで出力されるローマ字とユーザーが入力する日本語の都道府県名を一致させるための辞書を作る。
“`swift
let RomeKanjiPrefecture = [“北海道”: “Hokkaido”,”青森県”: “Aomori”,”岩手県”: “Iwate”,”宮城県”: “Miyagi”,
“秋田県”: “Akita”,”山形県”: “Yamagata”,”福島県”: “Fukushima”,”茨城県”: “Ibaraki”,
“栃木県”: “Tochigi”,”群馬県”: “Gunma”,”埼玉県”: “Saitama”,”千葉県”: “Chiba”,
“東京都”: “Tokyo”,”神奈川県”: “Kanagawa”,”新潟県”: “Niigata”
【Swift】郵便番号が実在するかしないか確認するバリデーション
Swiftで郵便番号が実在するかしないか確認するバリデーション
他のAPIを使う必要がないのでやりやすいです。
“`swift
//郵便番号のバリデーション
CLGeocoder().geocodeAddressString(“0000000”, completionHandler: {(placemarks, error) -> Void in
//存在しない郵便番号
if((error) != nil){
print(“存在しない郵便番号です”)
}
else{
//入力がすべて正しい
print(“成功”)
}
})“`
CLGeocoderを使ってエラーが出るか出ないかで判別。
入力する郵便番号はハイフン無しで文字列型なので注意が必要。
シミュレータの動画を撮影したい時のメモ
何度も忘れて調べてしまうのでメモ。
– Simulatorを起動
– `xcrun simctl io booted recordVideo video_test.mov`を実行
– Simulatorを操作
– ctrl + cで終了
最初のアプリを作る方法
iOSアプリを作ったことがない方が、とりあえず最初のアプリを作る方法です。
画像を表示するシンプルなアプリを作ります。#1、Macをひらく
iOSアプリを作るには、iMacもしくはMacbookが必要です。
![macbookIMGL4495_TP_V.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/e63b8cd2-0aad-2fd9-5671-c669cf27c8d4.jpeg)#2、Xcodeをダウンロード
App Storeのアプリを開き、「Xcode」で検索して、Xcodeをダウンロードします。
![スクリーンショット 2021-10-19 1.58.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/01b0767a-7f5d-0805-de88-34546f344e69.png)![スクリーンショット 2021-10-19 1.57.22.png](https://q
React Native + Expoで(iOS,Android)開発環境を構築する
弊社のサービス[Hapitas](https://apps.apple.com/jp/app/%E3%83%8F%E3%83%94%E3%82%BF%E3%82%B9-hapitas-w%E3%81%A7%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%8C%E8%B2%AF%E3%81%BE%E3%82%8B/id1475444626)のアプリ版はReact Nativeを用いて開発されています。インターンとして開発に携わっているのですがで正直環境がどのように動いているのか全く理解していなかったので、勉強としてまずは開発環境を構築したので備忘録としてまとめます。30分ほどあれば作れます。
# React Nativetとは
React Native(リアクト・ネイテイヴ)は、Facebookが作成したオープンソースのモバイルアプリケーションフレームワークです。開発者がネイティブプラットフォーム機能とともにReactを使用できるようにすることで、Android、iOSアプリケーションを開発するために使用されています。Web開発で用いられるReac
Xcode 実機にアプリアイコンが反映されない時
## 環境
– MacOS Big Sur 11.6
– Xcode 13.0
– Swift 5.5### 状況
Simulator, Xcode 内の Scheme ではアイコン画像は表示されているが実機だけ反映されない。
試せることは全部試した。### 解決
アイコン画像が反映されていない開発アプリを削除せずに、iPhone 再起動。
Swift Package Managerでライブラリを自作して使うまでの最初の一歩
## 今回作るもの
![スクリーンショット 2021-10-16 11.07.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/c3f8e30c-a338-fb60-5fb2-27199c44c19e.jpeg)
今回はSwift Package Manager(以下SPM)の作成にチャレンジしてみましたので、作成方法から使用方法を体験的に学べるようご紹介したいと思います。そもそもSPMってなに?と言う方はこちらを一読される事をおすすめします!
https://swift.org/package-manager/
https://zenn.dev/jollyjoester/articles/08b42792553169
https://qiita.com/hironytic/items/09a4c16857b409c17d2c
記事見る時間が無い。
と言う方には”SPMは、Swiftコードの配布を管理するためのツールで、手軽に自作したライブラリを公開したり、使用したりできるA
【Swift】読みやすいコードを書くためのコーディングルール(基本編)
## 概要
– 弊社のiOSチームではコーディング規則がある程度細かく定められている
– コードの可読性を上げ、コーディング品質を属人化させない目的
– 転職当時「どの順序で宣言するのがいいのかわからない…!」のような悩みが大きかったので、参考としてまとめます## プロパティ名
– プロパティは Lower Camel Case (最初は小文字、語頭が大文字)とする
– 宣言時には `:` を変数名に続けて入力し、空白1文字ののち型を宣言する“`swift
var playerId: Int
“`– アルファベットの省略語は大文字を用いる
“`swift
var webURL: URL?
“`– ただし、変数名の頭にきた場合には小文字とする
“`swift
var urlString: String?
“`– **アクセスレベルによって `_` をつけるといったことは行わない**
“`swift
private var someFlag: Boolvar otherFlag: Bool
// NG
private var _s
Swift URLで、日本語URLに対応する
# 概要
URLが表現された文字列をSwift URLクラスにする場合、
“`swift
let url = URL(string: “https://qiita.com”)
“`のような書き方をすると思います。
これでURLの処理をしていくことになります。しかし、日本語が含まれるURL、例えば、
総務省のWikipedia https://ja.wikipedia.org/wiki/総務省
なんかだと、“`swift
let url = URL(string: “https://ja.wikipedia.org/wiki/総務省”)
print(url) // nil
“`このように日本語のURLはnilになります。
なので、これを日本語URLに対応するようにします。## URLComponentsで日本語URL対応する
日本語URL対応のためURLComponentsを使います。
https://developer.apple.com/documentation/foundation/urlcomponents
ドキュメントにも書いてあります
Core Dataでの書き込み時にnewBackgroundContextに対する命令はperform/performAndWait内でないといけない
# はじめに
Core Dataでの書き込み時に`newBackgroundContext`メソッドで書き込み用コンテキストを利用することがあると思いますが、そのコンテキストに対してperform/performAndWait外から`fetch`や`count`などでリクエストを送ってはいけません。perform/performAndWaitで実行が保護されるキュー内でコンテキストにリクエストを送るべきのようです。
ちなみにこれデバッグオプションでアサート`-com.apple.CoreData.ConcurrencyDebug 1`を有効にするとクラッシュするのもわかります。
Appleのサンプルコードである[Handling Different Data Types in Core Data](https://developer.apple.com/documentation/coredata/handling_different_data_types_in_core_data)を駄目な感じに改変し、挙動を確認してみます。
![スクリーンショット 2021-10-14 18
Core DataのEntityが持つAttributesの初期値は基本GUIで設定して必要だったらawakeFromInsertで記載する
# はじめに
Core DataのEntityが持つAttributesは初期値をXcodeのGUI(.xcdatamodeld)で設定できます。`NSManagedObject`のメソッド`awakeFromInsert`ではInsert時の値を入れることもできるので同じ値を重複して入れることで紛らわしいと感じるかもしれません。
初期値をどうするかはあらかじめ整理しておくと良いのではないかと思ってこの記事を書いてみました。コメントなりでご意見を
ください。# 最初に結論
基本はデフォルト値をGUIで設定し、どうしても必要だったら重複する値を`awakeFromInsert`で設定する。
– awakeFromInsertで設定する初期値
– SHOULD
– insert時に計算したい固定値でLight Weight Migrationで追加しない最初からあるAttributes
– 例
– UUID().uuidString
– Date()# 前提
M1 MacでiOSアプリをXcodeから走らせる
## M1 MacでiOSアプリをXcodeから走らせる
M1 MacでiPadアプリが動かせるようになって、iOSアプリの新たなプラットフォームとなりました。
基本的にはほとんどiPadと同様の動きのようですが、一部そうではないようです。#### iPadで問題なく動作するのにM1 Macでは死ぬ
iPadで問題なく動作するのにM1 Macでアプリがクラッシュする事象が発生しました。
私がクラッシュに直面したのは以下のコードです。“`swift
let appearance = UIToolbarAppearance()
if #available(iOS 15.0, *) {
self.toolbar.scrollEdgeAppearance = appearance // ここで死ぬ
}
“`
どうやらUINavigationControllerのツールバーにsetScrollEdgeAppearance:というセレクタが無いことが原因のようです。
このコードの解決策は“`swift
let appearance = UIToolbarAppearance
Swiftの@unknown defaultを理解する
Swift 5で追加されたswitch文で使える`@unknown default`の旨味が最初、全然分からなかったが、実例を通じて使い方と意図を掴んだ気がするので知見として広めたい。
### swiftのswitch文の良さは網羅性を言語レベルで担保できる
swiftのswitch文は全てのcaseを満たすようなコードを書かないとコンパイラーエラーになり、実装漏れを気づかせてくれる優秀な言語機能だと思っています。
なのでなるべくdefault文は使わずに全てのcaseを書いておくようにしていました。### `@unknown default`の良さがいまいち分からなかった
– ウィジェットのサイズパターン分けで`@unknown default`を使った方が良いとの警告が出てたが、「網羅性担保できなくなるだろうがぁ:triumph:」と思って全部case書いていた
![スクリーンショット 2021-09-28 17.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147358/81ac
【Swift】入力フォームで入力金額から手数料を引いた額を自動算出して表示
Swiftを使って、入力フォームで入力金額から手数料を引いた額を自動算出して表示させる機能を実装。
イメージとしてはメルカリの出品画面のように、売値を入力すると、手数料を引いた売上額が自動で算出&表示される機能。
今回は入力フォームライブラリ「Eureka」を使用。
https://github.com/xmartlabs/Eureka
## Eurekaを導入
Eurekaの導入は以下の記事を参照してください。
https://qiita.com/ShinokiRyosei/items/3090290cb72434852460
https://wagtechblog.com/programing/swift-eureka.html
http://swift.hiros-dot.net/?p=448
導入が終わったらswiftファイルでimportします。
“`swift
import Eureka
“`## 入力フォームで入力金額から手数料を引いた額を自動算出して表示
次にフォームのコードをviewDidLoad内に入力します。
“`swift