iOS関連のことを調べてみた2020年08月01日

iOS関連のことを調べてみた2020年08月01日

XcodeでArchiveしようとしたらbuildはsuccessだがorganizerに現れない

iPhoneアプリの更新リリースしようと思ったらなぜか出鼻を挫かれた。
#環境
Xcode Version 11.6
MacOS 10.15.4

#現象
Product->Archiveするといつものようにbuildの時間に入る。
“Build Succeeded”の表示が出て、通常ならこのままOrganizerが立ち上がり、Archiveの履歴が表示されるはずである。
しかし表示されない。
Window->Organizerで開いて見ても今作ったものが履歴に表示されない。これいかに。

#原因
https://developer.apple.com/forums/thread/127212
↑と同じことが起きているようである。
/Users/****/Library/Developer/Xcode/Archivesまできて
この下には日付ごとのディレクトリがある。
しかし
2020-08-01だけが所有者がrootになっておりdrwxr-xr-xときた。
書き込めてないんじゃない?

#解決策
その場しのぎではあるが、2020-08-01の権限を777にするとarchiveはうまく

元記事を表示

【Swift】ゼロからのCombineフレームワーク – とりあえずViewにデータバインディングしたいための人の最小実装

# 意外と難しかったCombine

RxSwiftならある程度使えるし、簡単に使えるようになるかな?と思っていました。
しかし、いざ試してみるとなかなか苦労したので、まずは普段の開発に取り入れられる部分から切り出してみました。

# Viewに値をバインドする最小実装 UIKit版

“`swift
import Combine
import UIKit

class ViewModel {
@Published var labelText: String = “Default value.”
}

class ViewController: UIViewController {
var label: UILabel! // 適当な場所(storyboard, viewDidLoadなど)で初期化する
let viewModel = ViewModel()

private var cancellables = Set()

override func viewDidLoad() {

元記事を表示

Swiftでパズルゲーム制作を開始した

## 動機
今まで独自のゲームを作ってばかりでしたが、全然売れなかったので、有名ゲームをパク・・参考にすることにしました。
とりあえず形から入ろうということで、ドラゴンとパズルをテーマにすることにしました。

このテーマで有名なゲームを参考にしていたのですが、「面白いか?」と単純な疑問を抱きました。
もう少し分かりやすいルールのパズルの方が良いのではと思い、別の有名ゲームを参考にしました。
ツムツムかポコパンかよく覚えていませんが、その辺りのゲームのルールが分かりやすそうだったので、パズル部分は隣接するアイテムをなぞって消すルールにしました。

## 現状
TestFlightでベータ版をテストしている状態です。

【Swift5】UserDefaultsを使ったTodoアプリ

# はじめに
だいぶ前に書いた[前回の記事](https://qiita.com/TheAtlasEngine/items/d29eba3e01f51c5906ea)の情報が古くなり、また掲載しているコードも今ならもう少し綺麗にできるなと思ったので更新記事を書くことにしました。

# 注意点
## UserDefaults.synchronize()について
いつの間にか[公式ドキュメント](https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize)にて「使うべきではない」と明示されてました。どうやら[iOS12のリリースノート](https://developer.apple.com/documentation/macos-release-notes/foundation-release-notes?preferredLanguage=occ)でも告知されていたようですね。なので本記事でも使わないことにします。

ただ、同期が少し遅い気がします。例えばチェックマークをつけ

元記事を表示

initとは

ググったら一発でわかりやすい記事が出てくるswiftのinitについて。

Modelでファイル作ってプロパティ定義した後にいつもこいつがいる。

initっていうんだからとりあえず初期化してんだろーなーとは勘で考えますが、なんか気になったので書きます。

***

【イニシャライザ】
>型(クラス、構造体、列挙体)のインスタンスを初期化(initialize)する特殊なメソッドのこと

“`

class User {
var id: String
var fullName: String

init(id: String, fullName: String) {
self.id = id
self.fullName = fullName
}
}
“`

init(){}の中括弧の中で、宣言した値を初期化してます。

元記事を表示

ipa作成時に「IPA processing failed」と表示されて作成が出来ない場合の対処方法

# 概要
アーカイブしたプロジェクトから、ipaを作成しょうとすると、「**IPA processing failed**」と表示されて作成出来ない問題が発生しました。

いろいろ調べて解決方法が分かりました。

ネット上では間違った方法が多いので、同じ問題にぶち当たった方のために、解決方法をQiitaに残します。

XcodeのOrganizeから作成しようとした時の画面 **↓**
aaaaa01.png
CIサービス(Bitrise)でも、exportArchiveコマンド実行時にエラー
スクリーンショット 2020-07-31 0.04.57.png【Swift 】[String]()とは

>var interestId = [String]()

変数宣言でよくみるこの配列の後ろについた()

そいやあこいつ、なんで()がついてんの?

って思ったので、忘備録として記録しておきます。

“`
Swiftでの配列の書式とコードの書き方

空で初期化する場合は下記の書き方をします。
var 配列変数名:[型名] = []
var 配列変数名 = [型名]()
“`

ほーなるほど。

var 配列変数名:[型名] = []

と書いても同じなんですね。

空で初期化する時にこの書き方をするらしいです。

元記事を表示

[swift]MVCモデルに関して簡潔にまとめました。

## MVCモデルとは
`Model`,`View`,`Controller`の頭文字をとった略称でそれぞれのフォルダを作成してプログラムの構成を他者が見た場合でもわかりやすくする手法。

この手法は多くのプログラマに使用されており、共通のストラクチャーとして認識してもらいやすい。
また、分業して作業する事ができる点や、変更や修正があった場合に影響を受けにくいなどというメリットが存在する。

## Model
機能に関する処理を行う。(データの処理を行う)

## View
表示と、ユーザーからのアクションを受ける処理を行う。

## Controller
機能とアクションを用いてViewに見せる処理を行う。

## 最後に
今回はMVCモデルに関してかなり簡潔にまとめました。
是非参考にしてください!

元記事を表示

iOSアプリ初リリースからこれまでにApp Store Reviewチームからリジェクトされた理由5選

私の最初のアプリ(WalCal)をAppStoreにリリースしてから、約9ヶ月が経ちました。リリースから今まで計7回AppleReviewの審査リジェクトされました。今回はそのリジェクト内容を紹介します。

# 1. 画像が鮮明ではない
WalCal(ウォーカル)の決済画面に利用可能なクレジットカード会社(VISA, JCB, MasterCard)のロゴ(UIImageView)をStackviewを使い表示しているのですが、これが全体的に伸びてしまったいたためでデザイン面でApple Reviewチームからリジェクトを食らいました。
![IMG_2339_iphonesespacegrey_portrait.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323176/b477d326-2b87-5dcd-5ca4-442b1cb59a67.png)

対処法はUIImageViewのContentModeをScaleAspectFillで設定していたのを、scaleAspectFitに変更しました

元記事を表示

Storyboardに表示されるMinimapを非表示にする

Xcode12からStoryboardでMinimapが表示されるようになりました。
これを非表示にしたいと思ったけれどViewメニューにはありませんでした。

こちらの Editor > Canvas > Minimap が該当コントロールの表示制御。

スクリーンショット 2020-07-30 3.51.43.png

無事非表示にできました。

元記事を表示

Vision.Frameworkの顔検出を試してみた

# はじめに
**Vision.Framework**での顔検出(+少し顔のランドマーク検出)を試してみて、
取得できるパラメーターや現状やりたかったけどできなかったことをまとめました。
(iOS13まで)

# 環境
Xcode 11.4.1
Swift 5

今回は、フロントカメラを表示した際に顔検出を行いました。
実装方法は主にこちら([【iOS12対応】Visionを使って顔検出を行う](https://nn-hokuson.hatenablog.com/entry/2019/07/25/212153))を参考にさせていただきました。

# 顔検出について
request: VNDetectFaceRectanglesRequest

## 顔検出範囲
– 可能
– 横顔の場合
– 目と鼻が出ている場合(口をマスクなどで隠した場合)
– カメラの上下と顔の上下が一致しない場合
– 顔が(縦)半分しかカメラに写っていない場合
– 2mほどカメラから離れた場合

– 不可能
– マスクで鼻から下を隠した場合
– 顔上(下)半分

元記事を表示

自分的にiPhoneシミュレータでiOS開発する際に欠かせない機能8つ

iOS開発には欠かせないiPhoneシミュレータ。

これが非常に出来がよく、実機で出来ることのほとんどをシミュレートしてくれるので、正直自分は実機よりもこちらを使って開発することが多いです。

Mac上でサクッと動作確認できることはもちろん便利なのですが、ショートカットキーを駆使すればキーボードに手を乗せたままいろいろ操作出来るのがこれまた便利。

また、一見出来なさそうに見えるアレやコレも実はシミュレート出来ちゃいます。

というわけで、個人的に便利だと思っているiPhoneシミュレータの機能をまとめてみました。

## 1. iPhoneシミュレータを回転させるショートカットキー

**「command + →」** で右回転、**「command + ←で左回転」** できます。

回転がほぼ必須なiPadアプリを開発するときは特に重宝します。

iPhoneシミュレータを回転させるショートカットキーXcode11で作成したプロジェクトをiOS12に対応させる方法

## はじめに
久しぶりに新規にプロジェクトを作ったのですが、iOS12で動かなかったのでその対応方法です。
Xcode11から SceneDelegate というものがテンプレートで生成されるようになりました。iOS13以降で同一アプリを複数表示するSceneという概念が導入されたことに伴う変更なのですが、iOS12ではSceneの概念がないためクラッシュします。
そのため、iOS12に対応させるためにはひと手間必要になってしまいました。iPhone5sやiPhone6など、まだまだ現役なので対応させない手はありませんよね。

## 開発環境
– Xcode11.5
– Swift

## 対応内容

### AppDelegate

UISceneSession Lifecycleの2つのメソッドをiOS13以降のみビルドされるように修正します。また、SceneDelegateで定義されるようになったUIWindowをAppDelegateに追加します。

“`swift:AppDelegate.swift
@UIApplicationMain
class AppD

元記事を表示

NaturalLanguageフレームワークを使用して日本語のための自然言語処理

Appleには、テキストの分析を支援する `NaturalLanguage` というフレームワークがあります。この記事は、日本語テキスト分析のための自然言語フレームワークがサポートする、いくつかの機能について取り上げます。

“`swift
import NaturalLanguage
“`

– テキストの言語を検知
– 文を単語区分に分割

この例では、入力テキストは以下のとおりです。

“`
データの保存はiOSアプリの持つ主要な機能です。たとえば、ユーザーが指定した色などの環境設定を保存したり、ウェブサイトのトークンをアプリに保存したり、ToDoリストのアプリを作ってタスクを保存したりすることができます。データをシステムに保存する方法はいくつもあります。
“`

## 言語検知

このコマンドを実行して、文の言語を検知できます。

“`swift
func detectLanguage(text: String) {
let recognizer = NLLanguageRecognizer()
recognizer.processString(tex

元記事を表示

【Swift】テキストに取り消し線を付ける

`NSAttributeString` を使って文字列を装飾するやり方をまとめました。

## 完成図

## 実装
“`swift
@IBOutlet weak var textLabel: UILabel!

private func setTestLabel() {
// 表示したいテキスト
let text = “文章の中の一部に取り消し線を付けたい。”
let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: text)
// 全体に共通して付けたいレイアウトを設定
attributeString.addAttribute(.font,value: UIFont.syst

元記事を表示

[swift5]Protocolの作成方法

## 実装のポイント
Protocolの作成方法を5つの項目に分けて言語化及び要約してアウトプットしていきます。
初学者の方**(私も初学者ですがw)**はProtocolに関してわからない部分が多いと思いますが、実装の流れを掴む事ができればコードは書ける**(Xcodeのおかげw)**と思いますので**実装の流れ**に注目して下さい!

今回は`ViewController`と`NextViewController`の2画面が存在し、
NextViewControllerからViewControllerへメソッドを委任したいと思います。

## 環境
swift5
Xcode 11

## ①Protocolの作成
まず`nextViewController`で下記コードのように**Protocolの定義**と、**Protocolで使用するメソッドの宣言**を行います。今は使用するメソッドの規則だけでOKです。

“`NextViewController.swift
protocol プロトコル名ProtocolDelegate {
//規則のみ決める
func メソッ

元記事を表示

Xcode 11でビルドしたアプリをiOS 14 betaシミュレータ上で動かす方法

最初の1分ほどの手順で、それ以降はXcode 11からiOS 14 betaシミュレータを直接選び、アプリ(iOS 13 SDK)を実行することが可能になります。

何か問題や気付いたことがありましたらコメントで教えていただけると助かります。

## 準備

* macOS Catalina 10.15.6
* Xcode 12 beta 3
* Xcode 11.5

:link: [More Downloads for Apple Developers](https://developer.apple.com/download/more/)
このApple公式ダウンロードサイトからXcode 12 betaとXcode 11のxipファイルをダウンロードしてインストールしています。
ビルドを行うXcodeバージョンは11.5でなくてもOKです(Xcode 11.6が現時点で最新)。
App Store版のXcodeでは試していないため有効かわかりません。

xipファイルから解凍した各Xcodeは以下の通りに配置しリネームしてあります。
* Xcode 12 beta 3: /A

元記事を表示

AutoLayoutで使えそうなUIViewのConstraintsExtension

#Contraint用Extensionがおすすめ
コードベースで書いた経験が少なかったため、Constraintをどうするか調べていたところ、とても参考になる記事がありました。
一部自分で手を加えましたが、とても使い勝手が良いです。

“`
extension UIView{
func anchor(top: NSLayoutYAxisAnchor? = nil,
left: NSLayoutXAxisAnchor? = nil,
bottom: NSLayoutYAxisAnchor? = nil,
right: NSLayoutXAxisAnchor? = nil,
paddingTop: CGFloat = 0,
paddingLeft: CGFloat = 0,
paddingBottom: CGFloat = 0,
paddingRight:

元記事を表示

【個人開発】FlutterとFirebaseでサボり防止アプリを作った

先日、個人開発アプリをリリースしました!やったね!!!

審査も通りまして、現在App StoreとPlay Storeで配信されております。

[App Store](https://apps.apple.com/jp/app/%E7%9B%A3%E8%A6%96%E3%81%97%E5%90%88%E3%81%86%E4%BC%9A/id1507154418)

[Play Store](https://play.google.com/store/apps/details?id=work.oka_ryunoske.procrastinators_watch_mutually)

せっかくなので、利用した技術のメリットと注意点をまとめておこうと思います。

# 作ったアプリ

これです。

広報用ページも作ってみたのでリンクを貼っておきます。

広報用ページはスマホで見る用にレイアウトしてます。

[監視し合う会 〜お互いサボらないようにみんなで作業しよう〜](https://kanshi-shiau-kai-app.web.app/)

英語名: Procrastinators W

元記事を表示

OTHERカテゴリの最新記事