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

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

Kotlin/Native で生成したSwiftコード を Xcodeプロジェクトに取り入れてみる

# やったこと
(KMPの文脈ではなく)純粋なKotlin/Nativeで生成した Swift(Objective-C)コードを、適当につくったXcodeのAppプロジェクトに取り入れる

# 仕組み
Kotlin/Native は Kotlinのコードを仮想マシンなしで実行できるネイティブ・バイナリにコンパイルする技術で 以下プラットフォームをサポートしている。

– macOS
– iOS, tvOS, watchOS
– Linux
– Windows (MinGW)
– Android NDK

Kotlinから iOS(macOS) 向けには framework に変換して使う。
また, XCFrameworkへの変換をサポートしてるプラグインも存在している。
(SPM へのサポートはしらべてないです。)

# 取り込み

“`kotlin
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework

kotlin {
val xcf = XCFramework(“shared”)

元記事を表示

[Swift]RxSwift ストップウォッチを作ってみた

# RxSwiftの実装練習
今回も引き続きRxSwiftの学習課題として、前回作成したカウンターアプリに少し機能を追加してストップウォッチアプリを作成しました。以下に実装したコードと利用した技術を紹介します。

## 仕様
| |

– 秒数管理はUserDefaultsを利用してます。これによりアプリを閉じた後でも最後に10秒~60秒の指定した秒数が保持された状態になります
– MVVMアーキテクチャを採用

**利用したUI**
– Label
– カウントの秒数を表示
– Button
– スタートボタン
– 押下するとカウントが始まります
– ストップボタン
– カウント止めます
– リセットボタン
– 最初に指定した秒数へ戻すことが可能となります
– Picker
– 秒数を設定

元記事を表示

図解 Swift Concurrency

# この記事について
## 注意
あくまで私の解釈です。
間違っているところがあるかもなので、その際には指摘してほしいです。
## 目的
– Swift Concurrencyの全体像を把握する
– 主な登場人物とその役割を把握することで、今後のSwiftConcurrencyについての学習をよりしやすくする
– [Swift.org](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)の一部を抜粋し図解する
## 離さないこと
– 細々としたコーディングの仕方
– Swift Concurrency外のこと
– Architectureなど
– SwiftUI or UIKitの画面との繋ぎこみ

# まずは図から
![Swift Concurrency 全体像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566476/2cb5fd3a-5c91-be

元記事を表示

毎日の収入をリアルタイムで確認できる「サラリー」をリリースしました

## 毎日の収入をリアルタイムで確認!「サラリー」アプリで仕事のモチベーションをアップ!

日々の収入額が見えづらく、モチベーションが続かないと感じていませんか?
そんな悩みを解決する新しいアプリ「サラリー」をご紹介します。

https://apps.apple.com/us/app/%E3%82%B5%E3%83%A9%E3%83%AA%E3%83%BC-%E3%81%8A%E7%B5%A6%E6%96%99%E7%AE%A1%E7%90%86%E3%82%A2%E3%83%97%E3%83%AA/id6670354348

「サラリー」は、月の給料日までに自分がどれくらい稼いでいるのかをリアルタイムで確認できるアプリです。
給料日と月のお給料を入力するだけで、毎秒・毎分間隔で増加する収入を確認でき、毎日の頑張りが目に見える形で把握できます。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/e72aee24-03ee-3e9d-ed64-1011e133a2cc.png)

元記事を表示

UICollectionViewCell をキレイに並べるのに苦労した話

# 背景
UICollectionView 内に、1行につき4つずつセルを並べようとしてもなぜか画面の外まではみ出してしまい苦労したので解決方法を残します。

# 元のコード

“`swift
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let sectionInsets = (collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.sectionInset ?? .zero
let interItemSpacing = 10.0 // セル間のスペース
let numberOfItemsPerRow = 4.0

// Safe Area を考慮した幅から、左右のインセットとセル間のスペースを引く

元記事を表示

RevenueCatを使ったサブスクリプション管理と私たちのアプリケーション

![ae6dd120-482e-4941-9d10-1149f828e419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882896/7ff4352f-eb3f-4a91-3a8f-19d711145f07.png)

:::note info
## はじめに
こんにちは!今回は、私たちのハッカソンプロジェクトで導入したRevenueCatについてご紹介します。RevenueCatは、App StoreやGoogle Play Storeでの複雑なサブスクリプションシステムのサポートをシンプルにするためのモバイルSDKおよびAPIです。RevenueCatを利用することで、サブスクリプションの管理が容易になり、ビジネス運営に専念できるようになります。
:::

## RevenueCatとは?
RevenueCatは、アプリ内のサブスクリプション管理を一括で処理してくれるツールです。App StoreやGoogle Playでのサブスクリプションの購入、管理、解約、復元といった操作を簡単に実装で

元記事を表示

超シンプル!書籍管理アプリ作ったよ!

# はじめに
書籍管理アプリって色々あるけど機能がモリモリ過ぎて「もっとシンプルでいいんだけどな〜」って、思ったことありませんか?
例えば、感想を記載できたり、Amazonの購入リンクがあったり、評価できたり。

今回作ったアプリ「DuplesS(読み方:デュプレス)」は、持ってるかどうかだけ分かる書籍管理アプリです!

是非、使ってみてください!

https://apps.apple.com/jp/app/dupless/id6504234469

# 使い方
使い方は簡単!
画面下のバーコードリーダーを押下して、本のバーコードをスキャンするだけです!
持ってない本なら、リストに追加されます。
持ってる本なら、所持していることを示すポップアップが表示されます。

これだけ!

![‎for6.7.‎002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3808248/71d874f2-1d0e-abea-1baa-02d33c774792.png)

# 悩み事
アップデート案に「手動入力の実

元記事を表示

iPhoneの紛失モードを強制解除するには?3つの方法をご紹介

# iPhoneの紛失モードを強制解除するには?3つの方法をご紹介

投稿者:中宮 和郎 | 投稿時間:2024年8月21日 11:00 | カテゴリー: [iCloudロック解除](https://jp.tuneskit.com/unlock-icloud/)

この記事は約6分で読めます。

iPhoneの『探す』から、紛失モードで2週間していたのですが、自分の手元に帰ってきました。どうすれば、解除し、iPhoneを起動することができますか?

iPhoneに紛失モードを設定した後、iPhoneを無事に見つかったが、解除の方法がわからなくて困っていますか?大丈夫!今回の記事はiPhoneの紛失モードという機能を解説して、それを強制解除できる3つの方法をご紹介します。では、まず紛失モードとは何かをご覧ください。

![iphoneの紛失モードを強制解除する方法](https://jp.tuneskit.com/images/resource/how-to-unlock-iphone-lost-mode.jpg)

## iPhoneの紛失モードとは?オンになったららどうなる?

元記事を表示

【Azure/Firebase】Azure PipelinesでCLIツールのインストールに失敗するのを解決する方法

## はじめに

Azure Pipelineでアプリを`Firebase App Distribute`に配布しています。
このパイプラインで本日(2024/09/12)突然エラーが発生したため、解決方法を記録しておきます。

## 環境

– Firebase CLI 13.17.0
– Azure Pipeline
– ubuntu-latest (Ubuntu 22.04)
– macos-13

## 起きたこと

以下の公式サイトにある、「Standalone Binary」の手順でインストールしていました。

https://github.com/firebase/firebase-tools

具体的には以下のコマンドを使用しインストールする方法を使用していました。

“`sh
$ curl -sL https://firebase.tools | bash
“`

ですのでパイプラインの定義は以下のようになります。(前後省略)

“`yml
– script: curl -sL https://firebase.tools | bash
d

元記事を表示

Carthage で IPHONEOS_DEPLOYMENT_TARGET を設定

最近、MacBook を買い換えたので Git から新しい端末へ iPhone アプリのプロジェクトをクローンしてビルドしています。その時に carthage update を実行すると古いプロジェクトでエラーが発生しました。

>The iOS deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 8.0, but the range of supported deployment target versions is 12.0 to 17.5.99.

外部ライブラリが古すぎるということだろうな…
使わないというのが一番いいのかもしれませんが、とりあえず、xconfig で、IPHONEOS_DEPLOYMENT_TARGET を一時的に変更するスクリプトにより対処しました。
このスクリプトを使えば、carthage update は成功するので書いておきます。

## シェルスクリプト
“`bash:carthage.sh
#!/usr/bin/env bash

set -euo pipefail

xcconf

元記事を表示

UITableViewを使ったらUIがぶっ壊れた

間違っているところやベストプラクティスでない場合がありますので、
その際は是非コメントにお願い致します!

## 前提と問題

Lineトーク画面にそっくりなUIを作成しました



図1:作成したトーク画面のスクリーンショット

上のスクリーンショットでは一見うまくいっていそうだけど、メッセージの送信を行うとレイアウトが崩れてしまいました。



図2:メッセージ送信後のトーク画面

この問題について考察して

元記事を表示

Local-First について調べてみた。これを使えばユーザー体験を最高にできそう!

## Local-Firstとは?

Local-Firstは、アプリケーションのデータや処理をローカルで実行し、クラウドやサーバーの遅延を極力排除するアプローチです。これにより、ユーザーは素早くレスポンスを得られ、オフラインでもアプリを使えるようになります。

今回は、Local-Firstの特徴や利点、そして使えるライブラリについて紹介していきます。

### ユーザー体験が良い

Local-Firstの最大の利点は、ユーザー体験の向上です。

– **ローカルにDBがあり反映が早い**
– サーバーにリクエストを送って結果を待つ必要がなく、データがすぐに表示されます。
– **オフラインでも利用可能**
– ネットワーク接続がなくても、ローカルに保存されたデータを使ってアプリを継続的に利用できます。後で同期するだけです。

この「待たない体験」は、特にモバイルアプリやウェブアプリで大きな効果を発揮します。ローカルでの処理が中心となるため、アプリのレスポンスが非常に速く、使っていてストレスを感じません。

### モバイルにも力を入れている

Local-Firstはモバ

元記事を表示

Custom URL schemesとDeep Linkingの概要

## Custom URL schemes とは

### iOSの場合 (Custom URL schemes) : やや非推奨

> カスタムURLスキームは、アプリ内のリソースを参照する方法を提供します。たとえば、ユーザーがメール内のカスタム URL をタップすると、指定されたコンテキストでアプリが起動します。他のアプリが、特定のコンテキスト データを使用してアプリを起動するようにトリガーすることもできます。たとえば、フォト ライブラリ アプリは指定された画像を表示する場合があります。
>
> https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app

#### 実装方法

##### 呼び出されるアプリにschemeを設定する

https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app

`CFBundleURLTypes`を設定すると

元記事を表示

はじめてのRevenueCat – (1) SDK稼働確認に必要なApp Store Connectでの対応

## はじめに

現在、[サブスクアプリハッカソン](https://prtimes.jp/main/html/rd/p/000000003.000139088.html) に出場しています。このハッカソンでは、期間中にRevenueCatによるサブスク収益管理を行なっているアプリをストアにリリースすることが要件になっています。

https://prtimes.jp/main/html/rd/p/000000003.000139088.html

今回初めてリリースするアプリにRevenueCat SDKを実装するので、まずはRevenueCat SDKの動作確認を検証用のテストアプリで行いたいと考えました。RevenueCatはストアとのAPIにより収益管理を行うソリューションですので、iOSの場合はAppStore Connectにアプリが登録されていることが前提条件となります。ただ、これは単にアプリ登録しているだけではダメで、ストアとのAPIが使えるように一定の条件を満たす必要があります。RevenueCat の実装よりも、この対応に結構時間を使ってしまいました。

この記事で

元記事を表示

jsPDFでiOS Safariでもダウンロードダイアログを出してPDF保存(同じタブで開かないでくれ!!)

## 結論
“`js
// jsPDFのインスタンスを作成
const pdf = new jsPDF()

// ~ おのおのPDFをイイカンジに作成してください ~

// PDFをBlob形式で取得
const blob = pdf.output(“blob”);

// typeがpdfだとiOSでダウンロードできないので、application/octet-streamに変更
const newBlob = new Blob([blob], { type: ‘application/octet-stream’ })

// Blobを使って一時的なURLを生成
const url = URL.createObjectURL(newBlob);

// ダウンロードリンクを作成
const link = document.createElement(“a”);
link.href = url;
link.download = “hogehoge.pdf”;

// ダウンロードを開始
link.click();

// メモリリークを防ぐため、URLを解放
URL.revok

元記事を表示

TextFieldに複数改行を入力させない

# はじめに

以前[こちら](https://qiita.com/zensehakittoneko/items/6af329855896240179b1)の記事を公開しました。
今回も「TENBIN」で実装した機能についての記事を書こうと思います。

もっとこうした方がいいとかあれば是非コメントをお願いします!
また、是非「TENBIN」で遊んでみてください!

https://apps.apple.com/jp/app/tenbin/id6670417709

# 本文
「TENBIN」では投稿内容の入力画面でTextFieldを使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3808248/2b7b6a4d-b609-6698-a6c7-ec56b2c026eb.png)

ここの実装をしていた時に「これ、140文字分の改行を入力されたらどうすればいいんだろう?」と思いました。
パッと思いついたのは3パターン
①: DBから取得した表示内容に複数改行がある場合、単

元記事を表示

AppiumのiOS実機テストでWebDriverAgentのインストールに失敗するとき

## 背景
AppiumをPythonで動かすにあたって、iOSの実機を接続して実行すると以下のようなエラーが発生した。(Tracebackから抜粋)

“`
UnknownError: An unknown server-side error occurred while processing the command.
Original error: Unable to launch WebDriverAgent because of xcodebuild failure:
xcodebuild failed with code 65. This usually indicates an issue with the local Xcode
setup or WebDriverAgent project configuration or the driver-to-platform version
mismatch. Consider checking the WebDriverAgent configuration guide for real iOS devices
at

元記事を表示

メモリキャッシュとディスクキャッシュの違いと実装方法~パフォーマンスの比較~

# はじめに
画像をキャッシュするという言葉をよく聞きます。キャッシュとは、一度読み込んだ内容を一時的に保存しておくことです。キャッシュすることにより再度同じ内容を閲覧する際に素早く読み込むことが可能になります。
以前にメモリキャッシュの実装経験はありましたが、ディスクキャッシュについては知りませんでした。そこでメモリキャッシュとディスクキャッシュの違いと実装方法とパフォーマンスの違いについて学んだ内容を紹介します。
# メモリキャッシュとディスクキャッシュの違い

## **メモリキャッシュ (Memory Cache)**
メモリキャッシュは、アプリが実行中にデータを一時的にRAM(メモリ)に保存する方法。

**メリット**
高速: メモリに保存されるため、データへのアクセス速度が非常に速い。

**デメリット**
小容量: 小容量であるため、過剰なメモリ使用はシステムからアプリが強制終了される原因になる。

**特徴**
揮発性: アプリが終了したり、システムのメモリが不足した場合、キャッシュデータは消失する。

短期的なキャッシュの利用に適しており、アプリが閉じられた後に保持

元記事を表示

SwiftUI 共有を簡単に実装できるShareLinkの使用方法

こちらはSwiftUIを使用しiOS16+のShareLinkの使い方です

今回は文字のシェアをします。

![Videotogif (11).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/4a87c438-578f-6931-798b-0f8afbf3ae7d.gif)

実装は簡単です

“`.swift
ShareLink(item: “Share Text”)
“`

これだけで可能です。
引数にシェアしたい文字を設定してあげるだけになります。

元記事を表示

【Xcode】RealmSwiftのマイグレーションエラー

# エラー文

::: note alert
Thread 1: Fatal error: ‘try!’ expression unexpectedly raised an error: Error Domain=io.realm Code=10 “Migration is required due to the following errors:
:::

 RealmSwiftを用いるアプリで、すでにシミュレーターでテスト済みのものに、新たに変数を追加すると上記のようなエラーが出てきてしまいました。

変数を追加するとは以下のような感じです。

“`Swift:CutomeMemo.swift
//変更前
@objc dynamic var memo: String = “”
@objc dynamic var detail: String = “”
“`

“`Swift:CutomeMemo.swift
//変更後
@objc dynamic var memo: String = “”
@objc dynamic var detail: String

元記事を表示

OTHERカテゴリの最新記事