iOS関連のことを調べてみた

iOS関連のことを調べてみた

UnityアプリのApple Store登録

# UnityからXcodeプロジェクトを作成

Unityから直接ビルドすることはできません。プラットフォームをiOSにしてビルドして出力されるのはXcodeプロジェクトです。ここで生成されたXcodeプロジェクトをXcodeで開いてビルドします。

WindowsでUnityを使っている場合は、USB等でMacにXcodeプロジェクトをコピーしてビルドすることになるのでとても面倒です。

# App Store Connect
iOSアプリの配布にはApp Store Connectを使います。これはGoogle Play ConsoleのiOS版のようなものです。

[マイアプリ](https://appstoreconnect.apple.com/apps)から新規アプリを作成することもできますが、Xcodeのアーカイブ機能を使って登録することもできます。

# Apple Store

## ストアでの表示名
Apple Storeでは、Google Play Storeとは違って制作者の名前が大きく表示されます。

もし、組織で開発するアプリを個人で作ってしまった場合は、後

元記事を表示

[Swift]Combine .sink, .store, .assign

# 目次
[1.SwiftCombineとは](#1-SwiftCombineとは)
[2.sink](#2-sink)
[3.store](#3-store)
[4.assign](#4-assign)
[5.おわりに](#5-おわりに)

# 1. SwiftCombineとは
我からApple様が提供する純正フレームワークで、データバインディング機能を実現します。
サードパーティのRxSwiftのApple純正版とも言えるでしょう。

# 2. sink
:::note
info RxSwiftでいうところの`subscribe`とも言えます。
:::
– 前提条件: `subscription`はAnyCanellabel型であること
– receiveCompletion: 実行状態を受け取る(成功失敗の受け取り)
– receiveValue: 実行の戻り値を受け取る

~~~swift: combineViewController
import UIKit
import Combine

let subject = PassthoughSubject

元記事を表示

Flutterでアプリのバックグラウンド状態で位置情報を使用しながら処理できるパッケージを作った

[株式会社Never](https://neverjp.com/)のshoheiです。

株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/

# 概要

弊アプリ(世界遺産ウォーキング)のユーザーさんから**アプリを閉じていても目的地に到達した事を教えて欲しい**というリクエストがあったので、その機能を実現するためのパッケージを作りました。

パッケージをアプリに導入したところ無事ストアの審査も通ったので宣伝(笑)も兼ねて共有します。

世界遺産ウォーキング
[iOS](https://apps.apple.com/jp/app/id1591767928)
[Android](https://play.google.com/store/apps/details?id=app.produ

元記事を表示

うっかりでも面倒くさがりでもできる!爆速で予定追加できるiOSショートカット

社会人には必須スキルのスケジュール管理ですが、筆者はこれが大変、非常に、本当に苦手です。
元々忘れっぽい性格なので、発生したタスクやスケジュールは即時カレンダーに登録するよう心がけていますが……。
それでもなお、急ぎのタスクが割り込んできたりするとカレンダー登録すらすっかり頭から抜け落ちてしまう有様です。

なので、手間を極限まで省略してお手軽に予定登録できる、数タップで完結するiOSショートカットを設定してみました。
何も考えず設定できるようさっくり説明していますので、画像を流し見して手順を辿るだけでOK!

デフォルトのカレンダーアプリはGoogleカレンダー等、他のカレンダーアプリと連携できるので、普段お使いのカレンダーにも使えるかと思います。

## 0.はじめに
iOSの「ショートカット」アプリを使います。やることは大まかに下記の3つです。
1.iOSのカレンダーに予定を追加するアクションを追加
2.開始日・終了日を選択するアクションを設定
3.1と2のアクションを紐付ける

## 1.カレンダーに予定を追加するアクションを追加

元記事を表示

Intune デバイス登録エラーをトラブルシュートする! (登録ブロック、タイムアウト)

Intune検証のため日々デバイス登録をする私ですが、自分のテナント設定をうっかり忘れてデバイス登録エラーを起こすことがたくさんあります。

先日Intune管理センター上に便利なモニター画面があることを知り、以後そのモニターを活用して以前よりも早く的確にエラーから抜け出せるようになりました。

本記事ではそのモニター機能の紹介と、直近で出会った登録エラーパターンとその対応についてまとめます!

## Case 1:プラットフォーム登録制限による登録エラー
「登録デバイスのプラットフォームの制限」機能で、iOS/iPadOS、Android や macOS の「個人所有」をブロックしているテナントで発生する事象です。

### 1. エラー発生
#### iOS/iPadOS デバイス側エラーメッセージ
ユーザーがデバイス登録を進める中で、プロファイルをインストールする工程にて次のエラーメッセージが表示されました。 (iOS/iPadOSの場合)
– **エラーメッセージ:** プロファイルをインストールできませんでした – サーバへの接続を確立できませんでした。
![image.pn

元記事を表示

リアルタイム Remote Configで強制アップデートを実装する最小構成【Swift】

# はじめに
個人開発しているiOSアプリ「[いいこと日記](https://apps.apple.com/jp/app/id6447811780?platform=iphone)」に強制アップデートを実装する機会があり、手軽に導入できる**Firebase Remote Config**を使用しました。
`Firebase SDK`の`v10.7.0`からサポートされているRemote Configの**リアルタイム更新**を使うことで、起動時だけでなくアプリの利用中でも即座に強制アップデートダイアログを表示することができます。
今回はできるだけ最低限の機能での実装を紹介します。

# Firebaseでの設定
![スクリーンショット 2024-01-17 6.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640032/53a086a5-8b8b-48a6-43cc-5aca2944f7b5.png)
Remote Config上に`required_version`というパラメータを作成

元記事を表示

【SwiftUI】Chartsの円グラフを使ってみた

# はじめに
ChartsにiOS17から追加された`SectorMark`を使ってみました。
めっちゃ便利でした

# 円グラフデータ
円グラフのデータを借りました

エクセルの円グラフはこう作る!クオリティーを上げる工夫も

# 最低機能実装
![スクリーンショット 2024-01-16 22.17.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/b8af2935-9524-99f4-f3e5-a6985c2cbd12.png)

“`swift
import SwiftUI
import Charts

struct FavoriteFruit {
let name: String
let count: Int
}

struct ContentView: View {
@State private var favoriteFruits: [FavoriteFruit] =

元記事を表示

競技プロで得たSwiftのTipsを…

## モチベーション
Swiftの文法や効率的な書き方を学ぶために最近少し競技プログラミングをしています!

そこで得た「こんな書き方があるんだ〜」を随時まとめていきたいと考え、自分の知識の積み重ねと共有という意味で記事にしてみました!

:::note info
この記事はこんな人におすすめ

– Swiftの文法等には多少慣れてきたけど、他の書き方を模索したい方
– 競プロをSwiftではじめたての方
– Swiftを個人開発もしくは業務でも書く方  #全員やないかい
:::

:::note warn
警告
必ずしも当記事でのコーディングを推奨するものではなくあくまでも、実装の引き出しを増やすための一助になればいいと考えているので、「こんな書き方があるよ!」や「この方が実行スピード早いよ!」等のコメントは勉強になりますので、ぜひご教示いただければ幸いです!
:::

## 詳細
入力・出力・番外編として大きく3つに分けて解説していきます!!
おそらく適宜、他の学びも追記していきます!

### 入力編

##### 配列に入力する簡単な方法

[Int]をfor-in文を使用

元記事を表示

iOSアプリで振り返るUIデザイン

# はじめに
業務や個人開発している中でデザインの知識やセンスのなさを実感していました。
そこでiOSアプリのアイコンやアプリ内のデザインを振り返りながらデザインについてちょっとだけ勉強してみようと思います。

# iOSデザイン史
それでは過去のiOSバージョンで採用されたデザインを見ていきましょう!

## 〜iOS6  スキューモーフィズム または リッチデザイン
iOS6までスキューモーフィズムが採用されていました。
テクスチャや影、リアルな質感などがスキューモーフィズムが採用されていました。
立体感、素材感が感じられます。

![スクリーンショット 2024-01-11 13.19.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/bfb4269a-d0eb-bfab-5f5e-779123a71f37.png)

出たてのiPod touchを触っていた頃が懐かしいです。

## iOS7〜現在 フラットデザイン
iOS7からフラットデザインが導入されました。
影や質感が削

元記事を表示

Macにcocoapodsをインストールする

# はじめに
iosアプリ開発で画像処理をしたい。その為にopen cvをcocoapodを使ってインストールしていく

### 1.Homebrewのインストール
以下サイトから一番上のインストールにあるコマンドをターミナルで実行
“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`
https://brew.sh/ja/
### 2.cocoapodsのインストール
以下コマンド実行
“`
brew install cocoapods
“`

インストール成功後セットアップを実施する。
“`
pod setup
“`

### 3.podileを作成する
Xcodeを終了し、iosプロジェクトファイルのルート階層までcdコマンドを使用して移動する。
移動後、以下コマンドでファイル作成
> [cdコマンドとは](https://blog-and-destroy.com/34941)
“`
pod init
“`

ファ

元記事を表示

React Native + Expo でiOSアプリ作成

React Nativeの勉強を兼ねつつ、自分も子どもも大好きな動物園でお題の動物を探してビンゴを目指す **どうぶつビンゴアプリ** を開発中!
ちなみに、iPhoneユーザなのにPCがWindowsのため、四苦八苦しながらiOSアプリを開発してました…。(そろそろMac買おうかな)

この記事では、アプリの作成過程や得た学び、躓いたことを書いていきます。
定期的に内容追加していく予定です!

# 目次
**[0. React Native & Expo とは?](https://qiita.com/drafts#0-react-native–expo-%E3%81%A8%E3%81%AF)**
**[1. 環境準備](https://qiita.com/drafts#1-%E7%92%B0%E5%A2%83%E6%BA%96%E5%82%99)**
**[2. React Native アプリのソースに触れる](https://qiita.com/drafts#2-react-native-%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%B

元記事を表示

iOSのシミュレータ不具合

再ダウンロードは時間かかるだけで意味ない

“`shell
for a in `ps -ef | grep -i xcode.app | awk ‘{print $2}’`
do
sudo kill -9 $a
done

rm -rf ~/Library/Caches/*
rm -rf ~/Library/Developers/CoreSimulator/Devices/*
for a in `ps -ef | grep -i coresimu | awk ‘{print $2}’`
do
sudo kill -9 $a
done
“`

その後デバイス削除➡再作成

元記事を表示

SwiftUIのTextFieldの高さを調整する方法: フォントサイズによるアプローチ

SwiftUIでユーザーインターフェースを設計する際、`TextField` の視覚的な高さを調整することが時には必要になります。しかし、`TextField` の高さを直接調整することはできません。この記事では、`TextField` の高さを変更する一つの効果的な方法として、フォントサイズを利用するアプローチについて解説します。

### `TextField` の高さの問題

SwiftUIの`TextField`は、デフォルトでその内容に合わせてサイズが決定されます。多くの場合、これは便利ですが、時には特定のデザインニーズに合わせて、より高い`TextField`を必要とすることがあります。しかし、`.frame(height:)` メソッドを用いても、`TextField` の高さは変更されません。これは、`TextField` が内部的にコンテンツ(特にテキスト)のサイズに基づいて高さを自動調整するためです。

### フォントサイズを使用した解決策

`TextField`の高さを効果的に調整する方法の一つは、フォントサイズを変更することです。`TextField`内のテ

元記事を表示

Flutter の iOS をターゲットにしたビルドで Xcode で起きていたエラーと対策

Flutter の iOS をターゲットにしたビルドで Xcode に関係するエラーが起きていて理由も対策もわからなかった。

Failed to build iOS app
Error (Xcode): Sandbox: rsync.samba(87976) deny(1) file-write-create /Users/…/…/…/…/build/ios/Release-iphoneos/Flutter.framework

Error (Xcode): Sandbox: dart(87954) deny(1) file-write-create /Users/…/…/…/…/build/ios/Release-iphoneos/.last_build_id

Error (Xcode): Flutter failed to write to a file at “/Users/…/…/…/…/build/ios/Release-iphoneos/.last_build_id”.

以上のような感じ。それこそ chtGPT にきいて

元記事を表示

【SwiftUI】折れ線グラフのデータ補完を設定する

# はじめに
折れ線グラフのデータ補完と言われてもわかりにくいと思うので、軽く説明します。

折れ線グラフって値のある箇所を線で繋いでいるので、実際には線のある箇所にはデータがない状態です。

![スクリーンショット 2024-01-15 21.23.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/2c3151e3-9822-748d-dd42-6a096fae3f40.png)

その補完をどのように表示するのかを設定することができます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-01-15 at 21.20.42.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0253958c-e502-451d-6162-1274337bb3a6.gif)

# サンプルアプリの全体実装
“`diff_swift
imp

元記事を表示

iOS in-app reviewのテストについて

## 起きたこと
– TestFlightでテストしようとしたが全然reviewダイアログ表示されません
– 審査後promotion codeを発行して公開前に機能テストをしようとしたがダイアログ表示されたものの実際投稿押すとエラーが起きる。

## 調査
[requestreviewの公式ドキュメント](https://developer.apple.com/documentation/storekit/skstorereviewcontroller/3566727-requestreview)
“`
When your app calls this method while it’s in development mode, StoreKit always
displays the rating and review request view, so you can test the user interface
and experience. However, this method has no effect in apps that you dis

元記事を表示

LazyVStackの孫ViewのStateが画面外でリセットされる

# SwiftUIのLazyVStackの孫ViewのStateが画面外でリセットされる
とても長いタイトルですが、タイトルままです
他の方が報告されている、こちらのOpen Radarと同じ問題です

https://openradar.appspot.com/FB9900814

iOS 17.2.1、Xcode 15で確認してます

# 起きている現象
例えば下記のようにLazyVStackの子ViewとしてChildView、ChildViewの子ViewとしてSubViewを配置します
(つまりLazyVStackから見たら、SubViewは孫View)
この時、SubViewの持つ@State及び@StateObjectが、そのSubViewが画面外に行った際にリセットされてしまいます
ChildViewの方は値が保持されているので、おそらく不具合かなと考えています

FlutterでiOS Web Pushを実装する

# FlutterでiOS Web Pushを実装する
今回は、FlutterでiOS Web Pushを受け取れる簡単なWebアプリを実装する方法を紹介したいと思います。(記事作成に生成系AIを一部使用してます)

## Web Pushについて
Web Pushとは、Webアプリケーションからユーザーに通知を送る仕組みのことです。Web Pushを使えば、ユーザーがWebアプリケーションを開いていなくても、ブラウザやOSの通知センターにメッセージを表示することができます。

Web Pushは、Service Workerというバックグラウンドで動作するスクリプトと、Push APIというブラウザが提供するAPIを使って実現されます。Service Workerは、Webアプリケーションがインストールされた時に登録され、Push APIは、ユーザーが通知の許可を与えた時に呼び出されます。Push APIは、Webアプリケーションに一意に紐づくPush Subscriptionというオブジェクトを生成し、その中に含まれるendpointというURLをサーバー側に送ります。サーバー側は

元記事を表示

【SwiftUI】Chartの棒グラフでグラデーションを設定した際にグラデーションの終点を揃える

# はじめに
SWiftUIのChartを極めようの会を1人でしてます。

# 解決したい課題
棒グラフにグラデーションを設定します。
“`swift
import SwiftUI
import Charts

struct Temperature {
let day: Int
let max: Double
let min: Double
}

struct ContentView: View {
@State private var temperatures: [Temperature] = [
.init(day: 1, max: 17, min: 13),
.init(day: 2, max: 25, min: 10),
.init(day: 3, max: 12, min: 11),
.init(day: 4, max: 21, min: 11),
.init(day: 5, max: 10, min: 6)
]

var body: so

元記事を表示

Expoでeas buildのad-hocのprovisioning profileに新しい端末を追加できない時

# 前提
– Expoのmanaged workflow
– expo-dev-clientを利用している
– eas buildを利用している
– iOSむけにad-hocビルドを配信したい

# 問題
– 新しいiOS端末を検証端末として登録したかった
– そのために`eas device:create`をして、新しい端末のUUIDを登録した
– その後`eas build –profile development –platform ios`でad-hocのビルド実行した(–profile developmentのdevelopmentのところは各自のeas.jsonの設定によって異なります)
– eas cliから`The provisioning profile is missing the following devices`と尋ねられるので、さっき`eas device:create`で登録した端末を選択して続行
– `Failed to provision 1 of the selected devices:0000xxxx-000359960C21xxxx (

元記事を表示

OTHERカテゴリの最新記事