- 1. 初めに
- 2. 解決したコード
- 2.1. 【SwiftUI】UIの階層を確認する
- 2.2. iOS Safari で reality ファイルを扱うときの tips
- 2.3. iOSでHTTP/2とHTTP/3を比較してみた
- 2.4. Flutter iOSシミュレータが真っ白になった時の対処法
- 2.5. クラウドでの実機検証サービスの考察 ~Remote TestKitの魅力について~
- 2.6. 【Swift】複数のトレイリングクロージャー
- 2.7. [備忘録]`SwiftPM.SPMRepositoryError error 3.`の解決手順
- 2.8. 【Swift】FontAwesomeを使う
- 2.9. LabelStyleの自作方法(SwiftUI)
- 2.10. SwiftUIの可読性を上げるために
- 2.11. 文字列を左寄せにする方法の考察(SwiftUI)
- 2.12. 【Xcode】NSLogを非表示にする
- 2.13. やった〜! AppIcon、用意するの楽になった!
- 2.14. iOSでデュアルSIM情報を取得する
- 2.15. 【Swift】Alamofireのパラメータエンコーディングについて
- 2.16. Unityゲームのメモリ分布概要
Swift UIで割り勘アプリを作ってみた!改良ver
SwiftUIを学んでいく過程でポートフォリオがてら作成した「**割り勘アプリ**」の作成手順と方法をまとめていきます。
初心者の方でも同じものが作れるように解説できたらなと考えています。
また至らぬ点や拙いところもあると思いますが優しく教えていただけると嬉しいです。
今回↓前回の記事で作成したアプリを改良していきます。
[SwiftUIで割り勘アプリの作り方を徹底解説!](https://qiita.com/amefure/items/9e158e538b695667d27f)
# 今回作っていくアプリ
:::note
割り勘アプリ 改良ver
:::![happy bithday.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/0285677b-b737-c606-9e1b-602dec1e7504.png)
● 追加する機能
+ メモも入力可能にする
+ 入力された情報をリスト表示
+ リストから情報の削除を可能に
+ 割り勘できる人数にカスタムを追加
+ アプリ
できるだけ「良い」迷路を自動生成するアルゴリズムを考える
# はじめに
迷路を作成するというQiitaの企画があったので参加します。Qiitaの企画
https://qiita.com/official-events/55631b864217a4df857aこの企画は、プログラムを使ってできるだけ「良い」迷路を作るものです。良いの基準は自分で決めてよいそうです。良い迷路になるようにソース上でいろいろな工夫をしていきます。言語はSwiftを使用します。
# 作成する迷路について
– 長方形で、左上がスタート、右下がゴール
– 大きさは縦横ともに7から30程度(壁の厚さも1と数える)
– 正解の経路は一つ
– ループ(後戻りなしで同じところをぐるぐる回る)なし
– すべて通路になっている2×2のエリアは存在しない
– すべて壁になっている2×2のエリアは存在しないすべて通路(or壁)になっている2×2のエリアは無駄な感じがするのでやめます。
![OK1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46631/33fc0cc8-7569-8944-
[iOS]サンドボックスでテスト課金が急にできなくなった!!
# はじめに
あるとき突然、「テスト課金ができない。特に課金周りのコードはいじっていないのに…」ということがあったので記事を書いておこうと思います。# この記事で問題を解決できるかもしれない人
以下の3つ条件に当てはまればおそらく解決できます。
逆に以下の3つの条件を満たさない場合は、この記事で問題を解決できない可能性が高いです。
– サーバー側、アプリ側のコードをいじっていないのに、消費型の課金テストが急にできなくなった
– レシート検証で「21003」が返ってくる
– 直近で`サブスクのアイテム`をAppStoreConnectに追加した※レシート検証時のstatusの値のそれぞれの意味は以下のドキュメントに記載があります。
https://developer.apple.com/documentation/appstorereceipts/status
# 結論
– レシート検証の時に`App用共有シークレット`をレシート情報と一緒に送れば解決!# 解決方法
## ①AppStoreConnectから該当アプリの「App用共有シークレット」の値を取得する
input type=”date” iOSの日付入力のクリアボタンが機能しない
初めに
webアプリをReactで作成していまして、` input type =”date” `を使用して日付の値を取得していたのですが、PCだと削除ボタンが機能し、iosだと機能しないという現象がおこりました。
解決するのに時間がかかりましたので忘記録です。解決したコード
“`react:app.jsx
import React,{useState} from ‘react’;
export default function App(props) {
// 日付の値を格納する
const [inputDate, setInputDate] = useState({ date: “” });// 日付の値を取得する処理
const handleOnChange = (e)=>{
const target = e.target;
const { name } = target;
const { value } = target;
//日付のセット
setI
【SwiftUI】UIの階層を確認する
# はじめに
めっちゃ最近知った便利な機能「View UI Hierarchy」をちょっと調べてみました。最近作った[こちら](https://github.com/SNQ-2001/FontAwesome-Swift)のサンプルアプリで試してみます。
# 表示方法
アプリをビルドします。
![スクリーンショット 2022-07-14 16.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8f90c2d8-6d9c-13d3-5f28-a5e800b91c62.png)
① スプレーのようなアイコンを選択します。
② 縦3本線のアイコンを選択します。
![スクリーンショット 2022-07-14 16.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/26ae0722-b489-3bfe-8ed0-f5394cad5b2e.png)
「View UI Hierarc
iOS Safari で reality ファイルを扱うときの tips
2022年3月ついに iOS 15 で WebXR Device API サポートが来たかと喜んだのもの束の間、 `immersive-ar` モードが動作しないことが発覚して結局 iPhone で WebAR はまだまだ難しいということを再認識させられたのであった。
https://zenn.dev/ikkou/articles/6f546b11ced571
一方で Apple は、USDZ という 3D モデルの独自フォーマットや、USDZ に動きやインタラクティブな振る舞いを加えることができる Reality という独自フォーマットを持っており、これらは iOS の AR Quick Look という機能を使って AR 表示することができる。AR Quick Look は iOS Safari からも利用することができるので、現状では iPhone で 6DoF な WebAR を実現するための最もカジュアルな方法ではないかと思う。
https://developer.apple.com/jp/augmented-reality/quick-look/
Reality フ
iOSでHTTP/2とHTTP/3を比較してみた
# iOS で HTTP/2 と HTTP/3 を比較してみた
iOS15 で HTTP/3 がサポートされました
https://developer.apple.com/videos/play/wwdc2021/10094/
## HTTP/3 とは
> HTTP/3 は次世代のインターネット プロトコルで、QUIC の上に構築されています。QUIC は、Google が開発し、インターネット プロトコルの規定を担う標準化団体 IETF に提唱したプロトコルです。HTTP/3 と QUIC を組み合わせることで、ヘッドオブライン ブロッキング、セキュリティ(TLS 1.3 は QUIC の基盤)、信頼度の低い接続での信頼性など、HTTP/2 での以前の課題に対処しています。
https://cloud.google.com/blog/ja/products/networking/cloud-cdn-and-load-balancing-support-http3つまり、HTTP/3 を使うといい感じになるらしいです
そこで、複数の画像をダウンロードした場合の速度を、iOS
Flutter iOSシミュレータが真っ白になった時の対処法
## 初めに
Flutterで開発している途中でiOSシミュレータの画面が真っ白のままになってしまい、解決に時間をかけてしまったので記録を残しておきます。## 環境
+ macOS Big Sur(バージョン 11.6)
+ Flutter 3.0.3## 問題点
Firebaseをアプリに追加して再度 iOSシミュレータをビルドすると成功するがシミュレータの画面が真っ白のままで動かなくなってしまう。
“`
Launching lib/main.dart on iPhone 12 in debug mode…
Running pod install…
Running Xcode build…
Xcode build done.
クラウドでの実機検証サービスの考察 ~Remote TestKitの魅力について~
本記事は[Qiita Engineer Festa 2022](https://qiita.com/official-campaigns/engineer-festa/2022)の[Remote TestKitを使ってレビューを書こう!](https://qiita.com/official-events/f0e8b25feb05af6326b3)のエントリー記事です!
https://qiita.com/official-events/f0e8b25feb05af6326b3
—-
# はじめに
ある日、新機能の開発が完了し、実機検証を進めていると、表示崩れが!!!!
すぐにデザイナーの方に「ここデザイン崩れてるので直してください!」と伝えると「私の方だと崩れてないですよ?」との返答。
あれーおかしいなと思い、調べてみるとSafariのバージョンが異なっていました。別の端末で見ると確かに表示崩れは起きずに、綺麗に表示されています。[^1]
Safariのどのバージョンからこの現象が起きてしまうのか調べようとするものの、**SafariはOSのバージョンと紐づくため
【Swift】複数のトレイリングクロージャー
# 1.はじめに
初投稿です。
会社の後輩がSwiftUIのチュートリアルにあったこれで躓いた時、きちんと答えることができなかったので、復習を兼ねて記事にしました。この記事では
* トレイリングクロージャー
* 複数のトレイリングクロージャーについて書いていきます。
# 2.トレイリングクロージャー
そもそもトレイリングクロージャーって何?↓↓↓これです↓↓↓
“`swift: 引数が1つだけの場合
/// クロージャー引数をもつ関数の宣言
func doHoge(fuga: () -> ()) {
fuga()
}/// 普通に引数にクロージャーを渡して、関数を呼び出す
doHoge(fuga: {
print(“fuga”)
})/// これがトレイリングクロージャー
doHoge {
print(“fuga”)
}
“`
“`swift: 複数の引数のうち、最後がクロージャーの場合
/// クロージャー引数をもつ関数の宣言
func doHoge(fuga: Int, piyo: () -> ()) {
print(“\(fug
[備忘録]`SwiftPM.SPMRepositoryError error 3.`の解決手順
## 環境
swift version 5.6.1
Xcode 13.3.1## 発生した問題
以下エラーが出てビルドが失敗
“`
The operation couldn’t be completed. (SwiftPM.SPMRepositoryError error 3.)
“`## 解決した手順
– Xcodeを終了
– ターミナルで以下コマンドを実行
“`
rm -rf〜/ Libray / Developer / Xcode / DerivedData
rm -rf〜/ Library / Caches / org.swift.swiftpm
“`
– Xcodeを起動
– Xcode左上のメニューから [File] -> [Packages] -> [Reset Package Caches]## 原因
SPMパッケージのキャッシュが破損したことが原因。## 参考
– [How to resolve SwiftPM.SPMRepositoryError error 3 in XCode 13.3 – stack overflow](https://
【Swift】FontAwesomeを使う
# はじめに
今回はFontAwesome v4.7.0に自分の使いたいアイコンがあったのでv4.7.0の使い方を紹介します。
おそらくv4.7.0以降でも同じ使い方が可能だと思います。# 実装
## フォントファイルをダウンロード
最初に[こちら](https://fontawesome.com/v4/get-started/)からフォントファイルをダウンロードします。
![スクリーンショット 2022-07-13 19.24.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2398d5d6-6469-49a3-7bdb-e113efc4f6ac.png)
このようなファイルがダウンロードされたと思います。
![スクリーンショット 2022-07-13 19.28.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ade40a7e-4a0a-3074-5c53-146e517f
LabelStyleの自作方法(SwiftUI)
## はじめに
Appleのサンプルコードを参考に、LabelStyleを自作する方法を紹介します。
https://github.com/apple/sample-food-truck/blob/820dd9fd2165debc6fd6d29f18169ebb45787dde/App/Truck/Cards/CardNavigationHeaderLabelStyle.swift
## 環境
– OS:macOS Monterey 12.4
– Xcode:13.4.1 (13F100)
– Swift:5.6.1## 既存コードのリファクタリング
以下のコードをリファクタリングしながら、LabelStyleの実装を紹介します。
“`swift:MonsterCellView.swift
HStack(spacing: 32) {
Image(iconName) // var iconName: String
.resizable()
.scaledToFit()
.frame(width: 68, heigh
SwiftUIの可読性を上げるために
# 元ネタ
こんなシンプルな View でもたくさんの書き方があるのが、SwiftUI の難しさだと感じる…。
みなさんが好みの解決策も教えてほしいです〜!— ウホーイ? (@the_uhooi) July 12, 2022
https://qiita.com/uhooi/items/7dfe7ae29adf7aea435b?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share
# SwiftUIの課題点
SwiftUIでは、同じ見た目をあらゆる記述で表現することができます。
故に可読性はエンジニアの腕の見せ所でもあります。
ここでは、SwiftUIのコンポーネントを参考に可読性の上げ方を考えてみます。# コンポーネントを構成する要素を考える
可読性を上げる上でヒントになるのが`Label`クラスです。
“`swift
Label(title: {
Text(“name”)
},icon: {
Image(“image”)
})
“`このクラスは、TextとImageで構成されています。
一見すると、このLa
文字列を左寄せにする方法の考察(SwiftUI)
## はじめに
SwiftUIで `Image` と `Text` を左寄せにしつつ、文字列を幅いっぱいに表示したかったのですが、うまくいきませんでした。
SwiftUI の View で、Text の右のパディングを 16 にしたいんだけど、文字列が長いと早い段階で改行されてしまう・・・ pic.twitter.com/sXoCYNm7J5
— ウホーイ? (@the_uhooi) July 11, 2022
実際のコードです。
“`swift:MonsterCellView.swift
import SwiftUIstruct MonsterCellView: View {
var iconName: String
var name: Stringvar body: some View {
HStack(spacing: 32) {
Image(iconName)
.resizable()
.scaledToFit()
.frame(width: 68, height: 68)
Text(name)
【Xcode】NSLogを非表示にする
# はじめに
動作には問題のない警告文が大量に出てきて鬱陶しかったのでログを非表示にしました
あんまり良くないとは思うのでやらない方がいいと思います。需要はないと思いますけど一応やり方を紹介しておきます。
# NSLogとは
`print`との違いは日時を表示してくれる点です。
![スクリーンショット 2022-07-12 15.36.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/948736cc-31c6-50fa-758c-acd2c1b408f4.png)# やり方
画像の赤枠内をクリックします。
![スクリーンショット 2022-07-12 15.40.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1e5be67c-efb9-51de-d0e0-4390b7470bd0.png)
クリックするとポップアップが表示されるので「Edit Scheme…」を選択
やった〜! AppIcon、用意するの楽になった!
# 全サイズ用意するの面倒だった
今まで、Xcodeのアプリ・アイコンは、十数種類のサイズを用意しないといけませんでした。# ワンサイズだけでいい
Xcode14から、1024pxのサイズだけ用意すれば、自動で調整してくれるようになりました。
楽!![スクリーンショット 2022-07-12 14.43.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/01116797-d540-5998-f0dc-3fab4afaa893.png)
?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.comCore MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/joh
iOSでデュアルSIM情報を取得する
SIMの情報を取得しようと今まではこんな感じで、キャリアの名前とか取れてたんですが、
“`
CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
self.carrierLabel.text = carrier.carrierName;
“`iOS12以降ではデュアルSIMを想定したコードにする必要があります。
“`objc
NSDictionary*dicCarrier = [[CTTelephonyNetworkInfo new] serviceSubscriberCellularProviders];
for (id key in dicCarrier) {
NSString *carrierName = [[dicCarrier objectForKey:key] carrierName];
if
【Swift】Alamofireのパラメータエンコーディングについて
# はじめに
私は通信には必ずAlamofireを使用します。
URLSessionより簡潔にかけて便利だからです。
しかし、パラメータを設定しなければいけない時にエンコーディング形式を設定しないと動作しなかったので備忘録として残しておきます。# パラメータエンコーディングの種類
## JSONEncoding.default
“`swift
let headers: HTTPHeaders? = [
“user-agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36”
]let parameters: [String: Any] = [“id”: “123456789”]
AF.request(“https://example.com/api”, method: .post, parameters: parameters, encoding: JSONEnco
Unityゲームのメモリ分布概要
メモリはゲームパフォーマンス最適化の非常に重要な側面です。特にモバイルデバイスの場合、ハードウェアデバイスが限られているが、該当ユーザーを配慮する必要があります。ゲームはPCまたはMacで開発されますが、最終的には(ほとんど)モバイルで実行されます(AndroidとiOSのみが考慮されます)。メモリが適切に制御されていない場合、OOMの原因でモバイルのOSによってプロセスを強制終了することが起こしやすくなります。
しかし実際には、異なるオペレーティングシステムでは、メモリ管理戦略はまったく異なります。プラットフォームごとに専門的なメモリ分析ツールがありますが、これらのツールは、プラットフォーム、統計戦略、さらにはシステムバージョンが異なるために統計的な偏差を引き起こします。たとえば、XCodeのMemory Reportページは、Instrumentの下の独自の統計とは異なります。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/04acc9bf-7520-3a7d-89ea-