- 1. 【意外と知らない】iOSアプリでのビルドコード
- 2. Combineフレームワーク リンク集
- 3. macOS Catalinaで fastlaneが動作しなくなった件 & 解決方法
- 4. Buttonのタイトル変更について
- 5. Swiftで予約語を変数名やCase名として使う
- 6. Firebase AuthenticationでTwitterのOAuthを利用し、Twitter APIにリクエストする
- 7. iOS10のサポートを切るときにやったこと
- 8. RxSwift + SPM + XCode11.2 + iOS 環境でビルドすると実行時にクラッシュする
- 9. Firebase Cloud MessagingをiOSアプリで利用したときのメモ
- 10. XcodeでDistribution時にentitlementsエラー
- 11. 画面遷移から戻るときに親ビューの画面を更新する方法
- 12. SwiftUIでプレビューがUnknown preview provider “ContentView_Previews”エラーとなる
- 13. SwiftUIとCoreDataを@FetchRequestで連携させる
- 14. URLからQRコードを生成する
- 15. Unity Cloud BuildでFirebaseを使ったiOSアプリをビルドする
- 16. Xcode11.2でStoryboardのUITextViewがcrashする
- 17. Flutterウィークリー #82
- 18. Go言語でiOS開発ツールを作成する:Localizable.stringsファイルからenumを生成する
- 19. 追記:修正11.2.1GM配信中【緊急周知】Xcode 11.2 使用注意!(Kozeさんブログより)
- 20. AutoLayout、バッティングが起きたとき、プライオリティは低いがバッティングの原因ではないものはどう扱われるのか
【意外と知らない】iOSアプリでのビルドコード
![スクリーンショット 2019-11-07 11.31.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49481/777478e0-0837-580c-c106-f36cd67e3f91.png)
意外と知らない人多いと思うのですが
***iTunes Connect***に送信するアプリ(iOS等)のビルドコードですが
バージョンコードが変われば同じものを使用してもいいんです。Androidだとだめなはずなので勘違いしている人多いかもしれないですね。
Combineフレームワーク リンク集
# はじめに
Combineフレームワーク についてのリンクをまとめてみました。
特にサンプルコードを見てみるのは、Combineフレームワークの概要を掴むのにとても有効です。#【Apple公式】
## Apple Documentation**Combine**
https://developer.apple.com/documentation/combine**Receiving and Handling Events with Combine**
https://developer.apple.com/documentation/combine/receiving_and_handling_events_with_combine## WWDC2109
**Introducing Combine**
https://developer.apple.com/videos/play/wwdc2019/722
>Combine is a unified declarative framework for processing values over time. Lear
macOS Catalinaで fastlaneが動作しなくなった件 & 解決方法
macOS Catalinaにアップデート後、fastlaneを実行すると、このようなエラーになる。
“`
% fastlane
zsh: /usr/local/bin/fastlane: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: no such file or directory
“`CatalinaからRubyのバージョンが変わったそうなのだが、その関連でエラーが出ているとおもわれます。
自分はこの辺の設定に詳しくなく、解決にかなり時間を費やしました:frowning2:。もし、同様の件でお困りの方がいれば参考になると思い、解決方法を書き残して置きます。
## エラー解消のために行ったこと
### gem update
gemを更新する。
“`
% sudo gem update –system
“`### install fastlane(失敗)
fastlaneを更新する。
“`
% sudo gem inst
Buttonのタイトル変更について
## Buttonのタイトルが変更できない、、、
Labelと同じだと思い“`swift:changeButtonTitle
ボタン名.currentTitle = “変更したいタイトル名”
“`とすると、エラーが表示されてしまいました。
## 変更方法
以下のコードで変更できました↓
“`swift:changeButtonTitle
ボタン名.setTitle(“変更したいタイトル名”, for: .normal)
“`##### 参考サイト
– https://stackoverflow.com/questions/26326296/changing-text-of-uibutton-programmatically-swift
Swiftで予約語を変数名やCase名として使う
Swiftで変数名やenumのcase名を命名しようとして使った単語が、予約語であったため使えなかったという事態に遭遇したことがある人は多いと思う。
“`UserStatus.swift
enum UserStatus {// Error: private’ modifier cannot be applied to this declaration
case private
case open
}
“`“`Vars.swift
// selfという命名のString型の変数は作れない
let self = “Ham Spam”
“`今回はその回避方法と、回避方法を使う際の注意点を解説する。
## 予約語を使う
Swiftの予約語として使われている単語は“でその変数名やenumのcaseを囲むことで使うことができる。
“`Enum.swift
enum Status {
case `public`
case `private`
}let status1 = Status.private
let s
Firebase AuthenticationでTwitterのOAuthを利用し、Twitter APIにリクエストする
[2018年5月にTwitterKitのサポートが終了](https://blog.twitter.com/developer/ja_jp/topics/community/2018/TKSDK_tr.html)し、Firebase Authenticationでも[OAuthを利用したTwitterログイン](https://firebase.google.com/docs/auth/ios/twitter-login?hl=ja)が推奨されるようになりました。
設定まわりに関してはすでにいくつか記事があるので、主にiOS/Swiftでの実装部分について書きたいと思います。というわけでさっそく作っていきましょう???
## 環境
* iOS 12.1〜
* Swift 5
* FirebaseAuth
* [OAuthSwift](https://github.com/OAuthSwift)
* [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)## TwitterのDeveloperア
iOS10のサポートを切るときにやったこと
先日、自社アプリのサポートOSを10.0 -> 11.0に変更する対応をしました。
実装するうえで参考になる記事が少なく、手探りでやっていったので、そのときの手順・ハマった点などをメモしておきます:pencil:# iOS10を切ることにした経緯
もともとチーム内に「管理面や新しい機能を取り入れていくことなどを考えると、古いバージョンを切りたいね」という話がありました。
さくっと調べてみたところ、2019年8月末時点で色々なアプリがiOS10を切り始めていることがわかりました。【iOS10のサポート切ってるアプリ】
* Slack
* Yahoo系列アプリ(ヤフオク、Yahoo!カーナビ、Yahoo! MAPなど)
* Kyash
* bitFlyer
* Eight
* SHOWROOM
* Airレジ
* テラー意外と多いな??
— orimomo / e
RxSwift + SPM + XCode11.2 + iOS 環境でビルドすると実行時にクラッシュする
##多分期間限定で掲載する投稿になります
表題の通りの内容です。XCode11からSwift Package Managerが統合されたので、Carthageから乗り換えていたのですが、先日リリースされたXCode11.2 で地雷を踏みました。
私の環境 : Xcode 11.2 final, Catalina 10.15.1, iOS 13.2
https://bugs.swift.org/browse/SR-11564?focusedCommentId=51285&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-51285
SPMに関連する処理の部分で、linkerがmoduleを最適化するところにバグがあるみたいです。
ですので、RxSwift以外でもSPMをつかってると広く影響があるようですね。一応回避策として、DEAD_CODE_STRIPPING = NO とオプションをつければいける様なのですが、私はひとまず、Xcode 11.1 を入れ直して対応し
Firebase Cloud MessagingをiOSアプリで利用したときのメモ
– Apple Push Notification Authentication Keyを用意する
– アプリIDの作成
– プロビジョニング プロファイルを作成https://firebase.google.com/docs/cloud-messaging/ios/certs?hl=ja
—
– FirebaseプロジェクトにiOSアプリを追加
– Apple Push Notification Authentication KeyをFirebaseプロジェクトのiOSアプリにアップロード
– Firebase 構成ファイル(GoogleService-Info.plist)をDLしてiOSプロジェクトに追加
– iOSプロジェクトにFirebaseSDKを追加(CocoaPods)
– https://github.com/firebase/quickstart-ios/blob/15a45e32607dceb3264da28879a48d7890b7dd0c/messaging/MessagingExampleSwift/AppDelegate.swift を参考に
XcodeでDistribution時にentitlementsエラー
# Distribution時にentitlementsエラーが発生
XcodeのOrganizerでアーカイブを `Distribute App` しようとしたら、entitlementsに関するエラーが発生しました。ちょっとハマってしまったので、解決(?)方法について共有します。
## 前提
“`
❯ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15
BuildVersion: 19A583❯ xcodebuild -version
Xcode 10.1
Build version 10B61
“`## エラーの内容
作成したアーカイブを選択して `Distribute App` をクリックすると、signingオプションの選択を求められます。
![スクリーンショット 2019-11-05 18.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27943/def0551a-7331-e926-d959-6c95
画面遷移から戻るときに親ビューの画面を更新する方法
##目的
親ビューからモーダル遷移した子ビューで操作を行い、その結果に応じて親ビューの内容を更新させるという処理を行いたかったのですが、Delegateを使う以外に簡単な方法がありましたので書くことにしました!(Delegateまだ理解してない…笑)実際には、
・親ビューにCollectionViewがある
・モーダル遷移した子ビューでCollectionViewに表示する情報を追加する
子ビューから親ビューに戻った時にCollectionViewのinsertItems()やアニメーションなどを含めたメソッドを実行したかったやり方を調べているとDelegateを使って処理を委譲するという方法を多くみましたが、このくらいの簡単な処理であれば**CallBack**という方法が簡単だということを知ったので紹介します!
##使うViewController
親:ViewControllr
(ボタンを押すと子ビューにモーダル遷移する)
子:ChildViewController
(ボタンを押すとdismissして子ビューから渡す値で親ビューの関数を実行する)
(今回は子ビューか
SwiftUIでプレビューがUnknown preview provider “ContentView_Previews”エラーとなる
小ネタですがハマってしまったので誰かの参考になれば。
## 環境
– macOS Catalina 10.15.1
– Xcode 11.2 (11B52)
– iOS 13.2## 現象
ビルドは通りますし、実行したら実機で動きますが、
プレビューがエラーで表示されません。![ 2019-11-06 10.09.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190739/3b367653-b0db-6800-a576-b54752d59aab.png)
## 原因
Display Nameが日本語なのが原因でした。
英数字のみにしたら直りました。![ 2019-11-06 10.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190739/f8696525-f5ba-6a32-f40a-0ef3d8ed543a.png)
## 回避策
そうは言ってもアプリ名は好きに付けたいです
SwiftUIとCoreDataを@FetchRequestで連携させる
データベースのデータをSwiftUIに表示したい場合、
データベースがCoreDataであれば、
`@FetchRequest` と `FetchedResults` を使うことによって連携することができます。# FetchRequest
[FetchRequestのドキュメント](https://developer.apple.com/documentation/swiftui/fetchrequest)
FetchRequestのパラメータには `sortDescriptors` や `predicate` などが用意されていて、
`@FetchRequest` をFetchedResultsプロパティにつけることによってCoreData内のデータを取り出せます。
例えば、EntityというデータモデルをcreateAt順で取り出したい場合は以下のコードの感じでプロパティを用意します。“`swift
@FetchRequest(entity: Entity.entity(), sortDescriptors: [NSSortDescriptor(keyPath
URLからQRコードを生成する
#手順
これをコピペ“`swift
extension String {func generateQR() -> UIImage? {
guard let data = self.data(using: .utf8) else { return nil }
guard let qr = CIFilter(name: “CIQRCodeGenerator”, parameters: [“inputMessage”: data, “inputCorrectionLevel”: “M”]) else { return nil }
let sizeTransform = CGAffineTransform(scaleX: 10, y: 10)
guard let qrImage = qr.outputImage?.transformed(by: sizeTransform) else { return nil }
return UIImage(ciImage: qrImage)
}
}
`
Unity Cloud BuildでFirebaseを使ったiOSアプリをビルドする
Unity Cloud BuildではCocoapodが使えません。
なのでCocoapodを使わずにFirebaseの機能をiOSで使う方法を紹介します。
##使えた機能
* Analytics
* Realtime Database
* Authentication
* Cloud Messaging
* Dynamic Links##UnityにFirebaseを実装する
###FirebaseのSDKを入れる
まず [ここ](https://firebase.google.com/download/unity?authuser=0 “Unity Firebase SDK”) からFirebaseのUnity用のSDKをダウンロードします。
次にダウンロードしたSDKをUnityにインポートします。
[Assets]>[Import Package]>[Custom Package…]
![2019-11-05 (3)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357553/d
Xcode11.2でStoryboardのUITextViewがcrashする
# エラー内容
“`
*** Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException’, reason: ‘Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)’
“`# 発生条件
– Xcodeのバージョンは11.2
– StoryboardのUITextViewを使っている
– 実機端末のosバージョンが13.2以下# 解決方法
## Xcodeをダウングレードする
11.2以外のバージョンを使う## simulatorで検証する
この問題は実機だけで発生する## `_
Flutterウィークリー #82
# Flutterウィークリーとは?
FlutterファンによるFlutterファンのためのニュースレター
https://flutterweekly.net/この記事は#82の日本語訳です
https://mailchi.mp/flutterweekly/flutter-weekly-82※Google翻訳を使って自動翻訳を行っています。翻訳に問題がある箇所を発見しましたら編集リクエストを送っていただければ幸いです。
# アナウンス
### Flutter Interact –日付を保存します
https://events.google.com/flutter-interact/
Flutterチームによる新しいイベント。今回はニューヨークで開催され、全世界に向けて生放送されます。# 読み物&チュートリアル
### Over the Rainbow –カラーフィルター
https:/
Go言語でiOS開発ツールを作成する:Localizable.stringsファイルからenumを生成する
# はじめに
`Go言語でiOS開発ツールを作成する` というモチベーションは、まずGo言語が自分にとってとても興味深い言語であるいうところから始まっています。もともとLinux上でC言語を使って組込製品などを作ってきた人間にとっては、Go言語はすごく分かりやすくて便利な言語だという感触がありました。しかも高速(らしい)です。
実は以前にSwiftでMacで動くiOS開発ツールは作った経験があるのですが、今回Go言語でチャレンジした感想は、Swiftに比べてもGo言語はとても優れているということです。(特にMacOSやLinuxで動くツールを作成する場合)# 目標
“`:Localizable.strings
“clode_window” = “閉じる”;
“delete something” = “削除する”;
“cancel” = “キャンセル”;
“OK” = “OK”;
“_Only_this_” = “Only this”;
“`例えば上記のような `Localizable.strings` から下記のようなswiftファイルを生成します。
“`swi
追記:修正11.2.1GM配信中【緊急周知】Xcode 11.2 使用注意!(Kozeさんブログより)
**追記:2019年 11月 6日 現在、この問題が修正された Xcode 11.2.1 GM が 開発者向けサイトからダウンロード可能です。**
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_2_1_gm_seed_release_notes/
・実際にインストールして試してみて iOS では問題点が修正されているのを確認しました。
・ただし、11.2 or 11.2.1 + macOS 10.15.1 の組み合わせで macOS 用アプリを作成した場合、そのアプリを macOS 10.15.1 より古いバージョン(最新バージョンよりまえのバージョン)で動かそうとするとクラッシュする不具合が残っているようなので、macOS 用アプリ開発をする場合はさらに次のバージョンの Xcode を待つ必要がありそうです。
(手元に macOS 10.15.1 よりまえの環境がないため、動作は未検証)問題点が修正された Xcode が正式公開された後この記事は削除します。
—
AutoLayout、バッティングが起きたとき、プライオリティは低いがバッティングの原因ではないものはどう扱われるのか
今回もAutoLayoutです。
A,B,C,D,Eの5つの荷物が入ったかばんを金属探知機にかけたら警報が鳴った。
Aを取り出してから再度かばんを検査するとまた警報が鳴った。
次にBを取り出して検査するとまた警報が鳴った。
さらにCを取り出して検査すると今度は警報が鳴らなかった。あなたが次にするべきことは次のうちどちらか。
– かばんの中身はDとEで決定する
– AとBを順番にかばんに入れて検査し、警報が鳴らないならかばんに入れておくことを決定する(要するにAとBについて調べる)これは私がAutoLayoutで感じた疑問である。
#AutoLayoutこの先生きのこる問題
AutoLayoutの3つの制約A,B,Cがある。
プライオリティはA>B>C。
ある状況でAとBはバッティングしてAとCはバッティングしなかった。
Bを排除することは決定だが、AとバッティングしないCはどうなるのか。#結論
Cは排除される。#検証コード
“`
import UIKitclass ViewController: UIViewController {
let vie