- 1. 子育て中でも勉強も開発もやる
- 2. SwiftTestingで例外処理をテストする
- 3. App Store審査却下😱AI機能搭載アプリは中国で配信規制があるらしい
- 4. リリース作業のしくじり
- 5. 【iOS】URLのInitializerの仕様がiOS17から変更されていた
- 6. やさしい @MainActor
- 7. R.Swift使い方とエラー対応方法について忘れないように
- 8. ユニバーサルリンクの設定とリダイレクトに関するトラブルシューティング
- 9. iOSアプリのリリースで躓いたこと・・
- 10. SwiftUIのTextEditor/TextFieldとキーボードとの間隔を調整
- 11. iOS17でPHPhotoLibrary.authorizationStatusの結果が変わっていた話
- 12. 【Xcode/Swift】たかがログ、されどログ、素晴らしきos.Logger
- 13. 【SwiftData】SwiftDataプロジェクトのテンプレートを解説する
- 14. 【SwiftData】Query with dynamic properties in a View
- 15. 【CreateML】画像分類モデルを作成して、bravesoftキャラクター画像分類アプリ作成してみた!
- 16. Flutter案件待ち間の冒険:アプリ模倣チャレンジ – 第1章「時計」アプリ 世界時計編
- 17. 【CSS】一部のスマホで動画再生中に動画上の画像が見えなくなる問題の解決方法
- 18. iOSにおける画面サイズとインターフェースのバリエーションを探る
- 19. Flutter × symbol-sdk
- 20. iOS開発でhttp通信や非同期通信を使おう!
子育て中でも勉強も開発もやる
![couple_baby_dakko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346608/c69b18d3-9d74-d933-e4ef-26358d2843b4.png)
# 子育てはやっぱり大変
子育てをしていると幸せなこともたくさんありますが、とにかく時間がかかります。子育て中の誰に聞いても「思ったより大変」と言います。現代は核家族化がかなり進んでいて、夫婦以外のヘルプを得られる環境はかなり減ってきていますし、「子育て中に勉強なんてできない」と嘆いておられる方も多く見受けられます。現在子育て中でなくても、子育てをすればそうなると思っておられる方も多いと思います。
# 本記事で伝えたいこと
私はアラサーの男で、現在2歳と0歳の子育て中です。Web系の企業でソフトウェアエンジニアをやっています。BEメインでやってきましたが、Web FEもそれなりにやってきました。スマートフォンアプリケーション開発は仕事ではやったことがありませんでしたが、子育てと仕事の合間を縫って、まずはFlutt
SwiftTestingで例外処理をテストする
## エラーがthrowされることをテストする
“`swift
@Suite final class SampleTests {
@Test func throwErrorTest() throws {
// なにかしらのエラーがthrowされることをテスト
#expect(throws: (any Error).self) {
try sample()
}// SampleTestErrorがthrowされることをテスト
#expect(throws: SampleTestError.self) {
try sample()
}// SampleTestError.hogehogeがthrowされることをテスト
#expect(throws: SampleTestError.hogehoge) {
try sample()
}
}
}
App Store審査却下😱AI機能搭載アプリは中国で配信規制があるらしい
## はじめに
弊社では、自社プロダクトのスマホアプリをApp StoreとGoogle Playにて公開しています。
先日、最新バージョンのリリースをApp Storeに申請したところ、審査が却下されてしまいました😱
その原因と対策を紹介します。## 審査が却下された原因
メールから、「**Guideline 5 – Legal**」に引っかかってしまったようです😱英語でいろいろ書いてありましたが簡単にまとめるとこんな感じ。
> 中国政府はディープシンセシス技術(DST)や生成AIサービス(ChatGPTを含む)に関する規制を強化しているよ。これらのサービスを中国で運営するには、工業情報化部(MIIT)からのライセンス取得を含む許可要件を満たさなあかんで!> 対応オプションは以下の通りや!
> 1. 必要な変更を行い、AI機能を削除したことを確認して再提出する。
> 2. 中国での配信を希望しない場合は、App Store Connectの設定で中国本土の選択を解除する。
> 3. すでに法令を遵守していると考える場合は、追加情報を提供して返信する。知らなかったねー!
リリース作業のしくじり
# はじめに
結論から言うと、以下二3点となります。
①リリース作業は業界一年目にやらせるなよw
②ちゃんとダブルチェックはやろうね
③ちゃんと使用している公式アナウンスはチェックしようねIT業界20年近いですが、なんだかんだずーーっとリリース作業に関わってます。
その経験について少々話します。とは言っても、あまりにも基本的なことしか記載しません。。
リリース作業の工夫とかテクニカルな記事では一切ございませんので、あしからず。# 最初の仕事でやらかすリリースミス
業界最初にやったのがリリース作業でした。今考えると正気の沙汰では無いですが、
客曰くやらせることがなかったから取り敢えずリリース作業を割り振ってみたw
だった気がします。どうなったかというと、**案の定リリースミスを起こしましたorz**。
エンドの客に納品するソースコードのビルドが通らないと。。ハッキリ言って渡された手順書もイケてなかったし、ダブルチェックもほとんどしない状態で納品物のまとめ作業も私が担当。。
作業を振る側もどうかと思いますが、振られた私も文句言えなかった私が悪いと言えば悪い。。
で
【iOS】URLのInitializerの仕様がiOS17から変更されていた
# 事の経緯
あるとき、URLの初期化が絡んだUTのケースでテストが失敗するようになった。
しかし、該当する実装はいじっていない。
謎挙動だ。。でも影響してないからヨシ!としてしばらく目を背けていました。
これにちゃんと向き合って深ぼってみたよという話です。# 問題
テストコードを簡単に作ってみました。
“`swift
import UIKitfunc test() {
let path = “https://www.google.com/”guard let url = URL(string: path) else {
print(“nil”)
return
}print(url) // https://www.google.com/
}test()
“`これは正常系なので期待値は想定通り。
次に、本来URLに渡したら値を返さないはずの値を入れてみました。
“`swift
//let path = “https://www.google.com/”
let path1 = “^-^”
やさしい @MainActor
## はじめに
多くのUIフレームワークがそうであるように、UIKit・SwiftUIといったAppleプラットフォームのUIフレームワークでは、UIの更新処理をメインスレッドで行う必要があります。そのため開発者は、どのスレッドでコードが動作するのかを注意深く確認しながらUIの更新処理を実装しなければなりません。しかし、それはとても難しいことです。
そのソリューションとなるのが `@MainActor` です。この記事では `@MainActor` が解決する課題を明確にし、`@MainActor` が私たちにもたらしてくれる恩恵についてやさしく理解できるようにします。
::: note
この記事は出てくるSwiftコードは Xcode 15.4 (Swift 5.9)で実行しビルドおよび動作させています。また、その結果を掲載しています。
:::## `@MainActor`登場前のUI更新の課題
`@MainActor` 登場までの課題を再確認するために、次のようなUIKitのコードを例にします。`fetchTodo(id:)` 関数はバックグランドスレッドでTODOデー
R.Swift使い方とエラー対応方法について忘れないように
R.Swiftの導入と使い方で詰まることが多かったので、参考にした記事と共に備忘録として書きます。
## 導入方法と使い方
– https://mama-lifestyle.jp/swift-dev-jp/rswift/
Localizable.stringsファイルを使用した文字列撲滅方法について、ファイルの作り方から、使用方法まで具体的に書かれている。
– https://dev.classmethod.jp/articles/r-swift-introduction/
R.Swiftの導入方法について具体的に書かれている。
この記事で画像と色はAssetsに追加すれば使えるんだなと分かりました。## R.SWiftの利点と仕組み
– https://dev.classmethod.jp/articles/r-swift-introduction/
上記の記事から引用します。下記の通り記載されています。
“`markdown
プロジェクトがビルドされるたびに、
このR.generated.swiftファイルの中にリソースファイルへのアクセスが構造体として定義されて、
それに
ユニバーサルリンクの設定とリダイレクトに関するトラブルシューティング
## はじめに
最近、iOSアプリにユニバーサルリンクを設定しました。その中で、理解をブラッシュアップすることができたので、記事に残したいと思います。
## ユニバーサルリンクとは?
ユニバーサルリンクは、特定のURLにアクセスするとiOSアプリを直接開くことができる機能のようです。アプリがインストールされているかどうかに関係なく機能するという解説をよく見かけます。一見、開発者が意識することなく、そのような設定ができると思われますが、アプリのインストール状態に応じた仕掛けを作る必要があるようでした。
## 設定プロセス
ユニバーサルリンクの設定プロセスをざっと記載します。
### 1. アプリのAssociated Domains設定
Xcodeにて、Associated DomainsのCapabilitiesを有効にし、ユニバーサルリンクで使用するドメインを追加します。
例: applinks:mydomain.com
※もしかすると、Apple DeveloperのCertificates, Identifiers & Profilesの画面でもAssocia
iOSアプリのリリースで躓いたこと・・
# 概要
実務ではともかく、個人的にモバイルアプリをリリースするのが初めての際
躓いたことが多かったです。
この記事では躓いたことの備忘録として記録しています。
(一部愚痴みたいにもなってますが・・・)皆さんがリリースする時は色々躓かないよう、この記事が
役立てば嬉しいです!# Apple Developer Programで躓いたこと
まずは「Apple Developer Program」に登録することになりますが、
登録するだけで私は1週間かかりました。。まずはそこで躓いた点のご紹介です!
https://developer.apple.com/jp/programs/
## Webで登録すると上手く行かなかった
下の画像の通り、Webで登録するのが当たり前かのように
誘導されますが、私の場合Webで登録すると上手くいきませんでした。![ios-ble-7-7-1200×610.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/ba3125b2-bf69-a08c-3
SwiftUIのTextEditor/TextFieldとキーボードとの間隔を調整
# SwiftUIのTextEditor/TextFieldとキーボードとの間隔を調整する
SwiftUIでTextEditorやTextFieldは、フォーカスが当たると自動でキーボードを避けて上に持ち上がります
デフォルトだとTextEditorやTextFieldのコンポーネントの底部とキーボードの上部には隙間がありません
このコンポーネントの底部とキーボードの上部を隙間を調整しようとした際に、思いの外ハマったので備忘録です| デフォルト | 期待動作 |
| :-: | :-: |
| ![image 89.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/3e408dfe-0dbd-45d4-44a5-8830c2ffbb83.png) | ![Frame 298.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214313/bb826f5f-cf91-4ffd-5a66-edd3b46217ea
iOS17でPHPhotoLibrary.authorizationStatusの結果が変わっていた話
# iOS17でPHPhotoLibrary.authorizationStatusの結果が変わっていた話
iOS17から写真へのアクセスの権限が **「選択した写真」** から **「制限付きアクセス」** に変更されました
この変更に伴いPHPhotoLibrary.authorizationStatusの結果が一部変わっていた話です
小さい変更なので、ほとんどのアプリは影響を受けていない印象です# 変わっていた箇所
`PHPhotoLibrary.authorizationStatus(for: .addOnly)` の結果が
* iOS16の **「選択した写真」** の場合、 **.limited** だったのに対して
* iOS17の **「制限付きアクセス」** の場合、 **.authorized** に変わっています他の権限の「フルアクセス(旧すべての写真)」や「写真の追加のみ」、「なし」の場合、`PHPhotoLibrary.requestAuthorization(for: .readWrite)` で権限確認した場合の結果に変更はありませんでした
また
【Xcode/Swift】たかがログ、されどログ、素晴らしきos.Logger
# はじめに
iOS(Swift)では複数ログ出力する方法がある。
最新バージョンのXcodeを使用して検証してみようと思う。# 前提
| 項目 | 内容 |
|:-:|:-:|
| Mac OS | Sonoma 14.5 |
| Xcode | 15.4 |
|使用言語 | Swift (バージョンは5) |# 結論
いきなりですが、ログ出力はos.Loggerを使ってください!!
これが便利すぎるので、他のログ出力メソッドは使う必要ありません:thumbsup:# ログの種類
昔からあるシンプルなログ出力メソッド。
タイムスタンプは自動では出力されないが、他言語と同じ使い方で出力可能。## NSLog
これも思いっきり昔からあるログ出力メソッド。
自動でタイムスタンプが出力される。## debugPrint
これもシンプルなログ出力メソッドで、Debug時の効率が良い(らしい)## os.Logger
勝ち、圧倒的勝利、便利すぎる。
Xcode15からoslo
【SwiftData】SwiftDataプロジェクトのテンプレートを解説する
# この記事は何?
XcodeのiOSプロジェクトについて、ストレージ設定で「SwiftData」を選択した際のテンプレートコードを解説する。
> Swiftを基礎から学ぶには
自著、工学社より発売中の「[まるごと分かるSwiftプログラミング](https://amzn.asia/d/7YPWJwl)」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。
> また、Swiftプログラミングを基礎から動画で学びたい方には、Udemyコース「[今日からはじめるプログラミング](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwii1qTuj_2BAxV4hlYBHbj5BqEQFnoECBYQAQ&url=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fstart-programming-today%2F&usg
【SwiftData】Query with dynamic properties in a View
結果を表示する子 View にて。
“`swift
struct UserListView: View {
@Query var users: [User]init(sort: SortDescriptor
) {
_users = Query(sort: [sort])
“`
こういうことですか。# 🧑🏻💻 参考
【CreateML】画像分類モデルを作成して、bravesoftキャラクター画像分類アプリ作成してみた!
初めまして!
bravesoft株式会社でiOSエンジニアをしている永井です。最近、Visionフレームワークに触る機会があり、機械学習機能は「面白い!」と個人的になりました。もっと追求するべく、Appleの機械学習から画像分類というのを見つけたので今回は「CreateML」についてのモデル作成からアプリの組み込み/実装までの記事となります。
この記事では、bravesoftの自社開発にあるキャラクターを分類していきます。
## この記事で得られるもの
・CreateMLの基礎知識
・画像分類モデルについて
・モデルの作成方法
・モデルのアプリ組み込み## CreateMLとは
macOS向けに開発された機械学習モデル構築フレームワークです。GUIベースのツールで、テキスト分類や画像分類や音声分類などのタスクを簡単に実行できます。Swiftとのシームレスな統合が特徴で、最適化されたモデルを生成し、Core MLでの統合も容易で作成したアプリに簡単に組み込むことが可能です。公式サイト
https://developer.apple.com/jp/machine-lear
Flutter案件待ち間の冒険:アプリ模倣チャレンジ – 第1章「時計」アプリ 世界時計編
## 世界時計のヘッダーを作ってみよう!
まずは世界時計の顔となるヘッダー部分から攻略開始だ!![スクリーンショット 2024-06-21 11.13.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147814/4b9e9fb7-c6b6-5979-cd87-964a48109561.png)
### スクロールで現れるタイトル
iPhoneのデフォルトアプリと同様に、ヘッダーのタイトルはスクロールに応じて表示されるように実装したぞ!
![Jun-21-2024 11-19-14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147814/b6e8f3cb-6d9b-4c45-12fd-791c26061031.gif)### ボタン配置で迷宮入り!?
ヘッダーにボタンを配置するのも一苦労だったんだ。レイアウト調整はまるで迷宮をさまようよう…。でも、Flutterのレイアウトウィジェットを駆使して、な
【CSS】一部のスマホで動画再生中に動画上の画像が見えなくなる問題の解決方法
ウェブページで動画を再生する際、一部のスマホでは、動画の上に配置した画像やボタンが見えなくなることがあります。この問題は、CSSの`transform`プロパティを使用して解決できました。
## 確認環境
– **デバイス**: iPhone X
– **ブラウザ**: Chrome、Safari## 問題の概要
以下のようなHTMLとCSSを使用している場合、一部のスマホで動画を再生すると、動画の上に配置したロゴや音量ボタンが見えなくなることがあります。
これらのブラウザでは、特にiOSの仕様により、動画要素のレンダリングが他の要素と異なる方法で処理されるため、このような問題が発生するようです。
### HTML
“`html
iOSにおける画面サイズとインターフェースのバリエーションを探る
### はじめに
iOSアプリ開発では、多様な画面サイズに対応する柔軟なインターフェース設計が重要です。
### 記事の目的
“wC”, “wR”, “hC”などの値に戸惑ったことはありませんか?この記事を読むと、Size Classの概念や、インターフェース設計での利用方法、そしてあらゆるデバイスで適応するユーザーインターフェースを作成するためのヒントを理解できるようになります。
### 概念
#### 1. Size Class
**Size Class**は、iOSで異なる画面サイズに対応するためのシステムです。画面サイズを次の2つの軸に分けて管理します:
– **横幅 (Width)**
– **縦幅 (Height)**各軸には2つのタイプがあります:
– **Compact**: 小さいサイズ (例:縦向きのiPhone)
– **Regular**: 大きいサイズ (例:横向きのiPad)例:横向きのiPadは、横幅と縦幅の両方がRegularなSize Classを持ちます。一方、縦向きのiPhoneは横幅がCompactで縦幅がRegularな
Flutter × symbol-sdk
# はじめに
こんにちは。だい(@ishidad2)です。
晴れ時々Symbolということで久々にSymbolネタの記事を書いていこうと思います。
今回は@Toshi_maさんが作成されているFlutter用のSymbolSDKを使ってスマホからトランザクションを飛ばしてみようと思います。
なお、DartやFlutterのインストールなどは事前に済んでいることが前提条件となります。# 環境
FVMとは、Flutter SDKのバージョンをプロジェクト毎に管理するツールです。
以下を参考に必要であればインストールをしてください。(Flutterのバージョン管理が必要なければ不要です)https://fvm.app/
以下、私の実行環境です。
:::note warn
これより先の記述は筆者の環境であるMacでの説明になります。それ以外のWindows等では当てはまらない説明があるかもしれません。適宜読み替えてください。
:::“`bash
% fvm –version
2.4.1% dart –version
Dart SDK version: 3.3.1iOS開発でhttp通信や非同期通信を使おう!
iOSソフトウェアを開発するようになってネットワーク接続を必要になってくるのではないだろうか.例えばHTTP通信や非同期通信をしたいことがあるだろう.
iOSではデフォルトで許可されてるのは`https通信`のみで,http通信は許可されていない.開発中はhttpと通信したいことも多いので,http通信の有効化を行う手順を紹介する.
# 前提条件
– [XCode のインストール](https://apps.apple.com/jp/app/xcode/id497799835?mt=12)
– Swiftで記述します# iOSデバイスでネットワーク接続許可をする
## XCodeでの設定> 今回は私用のプロジェクトを使います
まずXCodeの自分のプロジェクトのボタンをクリックする.
次に自分のプロジェクトのターゲットをクリックする.
`info`を選択し,`Custom macOS Application Target Properties`の欄の`+`ボタンを押し,`App Transport Security Settings`を追加する.
`App Tra
関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた