■目次
Objective-CSwiftSwift+PushSwift+Playground更新CocoaPodsMac操作トラブルその他メモ
■Objective-C
Xcode | くずのは探偵事務所 http://www.kyoji-kuzunoha.com/category/xcode 2018/02/18、Xcode9.2で1〜6まで試してみたが、若干表記が違う程度ですんなり動いた
■Swift
■画面の向き ViewControllerごとに画面の向きを固定する - Qiita http://qiita.com/masapp/items/38ed20b27dcc09c24cba ■パスの確認 ※パスは下のように取る? [0]ではなくlastとか使う方がいい?
let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] /* // パスの確認 let documentDirPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) print(documentDirPath) */
■Web上の画像を表示
@IBOutlet weak var myImageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let url = URL(string: "https://pbs.twimg.com/media/DGynUZqV0AAK9aq.jpg") let task = URLSession.shared.dataTask(with: url!) { data, response, error in if error == nil { if let dlImage = UIImage(data: data!) { self.myImageView.image = dlImage } } else { print("error") } } task.resume() /* // 以前の書き方 var myURL = NSURL(string: "https://pbs.twimg.com/media/DGynUZqV0AAK9aq.jpg") var myData = NSData(contentsOfURL: myURL) var myImage = UIImage(data: myData) myImageView.image = myImage */ }
■ローカルファイルを扱う
override func viewDidLoad() { super.viewDidLoad() /* // ディレクトリを作成 let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] if (FileManager.default.fileExists(atPath: documentPath + "/test")) { print("ディレクトリはすでに作成されています") } else { do { try FileManager.default.createDirectory( atPath: documentPath + "/test", withIntermediateDirectories: false, attributes: nil ) print("ディレクトリ作成成功") } catch let error as NSError { print("ディレクトリ作成エラー: ?(error.localizedDescription)") } } */ /* */ // ファイル・ディレクトリを一覧表示 let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] var file_names: [String] { do { return try FileManager.default.contentsOfDirectory(atPath: documentPath) //return try FileManager.default.contentsOfDirectory(atPath: documentPath + "/test") } catch { return [] } } let fm = FileManager() for file_name in file_names { var isDir = ObjCBool(false) let isExist = fm.fileExists(atPath: documentPath + "/" + file_name, isDirectory: &isDir) if isDir.boolValue == true { print("dir=" + file_name) } else if isExist { print("file=" + file_name) } else { print("nodata=" + file_name) } } /* // ファイルのテキストを表示 let file_name = "data2.txt" if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { let path_file_name = dir.appendingPathComponent(file_name) do { let text = try String(contentsOf: path_file_name, encoding: String.Encoding.utf8) print(text) } catch { print("NG") } } */ /* // ファイルにテキストを保存 let file_name = "data1.txt" //let file_name = "test/data3.txt" let text = "abcd1234" if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first { let path_file_name = dir.appendingPathComponent(file_name) do { try text.write(to: path_file_name, atomically: false, encoding: String.Encoding.utf8) print("OK") } catch { print("NG") } } */ }
■Swift+Push
amazon SNSでiOSアプリにプッシュ通知を送る!画像つきで詳しく使い方もまとめました! | イリテク https://iritec.jp/app_dev/16197/ Amazon SNSを使ってiOSアプリにプッシュ通知を送信する方法 | レコチョクのエンジニアブログ https://techblog.recochoku.jp/2537 Lambda(node.js) + Amazon SNSでiPhoneにプッシュ通知を送るサンプルコード - Qiita https://qiita.com/Fujimon_fn/items/740ecfdd9328375c1616 おじさんのための2018年スマホPUSH通知事情 (+GCM終了のお知らせ) - Qiita https://qiita.com/keidroid/items/290af7b99952e889f4a7 ■旧サンプル http://refirio.org/twitter/?word=push
■Swift+Playground
■Playgroundでボタンやラベルを確認
import UIKit var myLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30)) myLabel.backgroundColor = UIColor.gray myLabel.text = "テスト"
■PlaygroundでJSONを取得
import Foundation import PlaygroundSupport PlaygroundPage.current.needsIndefiniteExecution = true class Client { func someTask() { let target = URL(string: "https://lolipop-dp07080676.ssl-lolipop.jp/memos/ios/json.php")! let task = URLSession.shared.dataTask(with: target) { data, response, error in if let jsonData = data { self.printJSON(jsonData) } } task.resume() } func printJSON(_ data: Data) { do { let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) print(json) if let items = (json as AnyObject).object(forKey: "BOOKS") { for item in items as! NSArray { guard let title = (item as AnyObject).object(forKey: "TITLE") else { continue } guard let price = (item as AnyObject).object(forKey: "PRICE") else { continue } print(title) print(price) } } } catch { print("parse error!") } } } let client = Client() client.someTask()
■PlaygroundでViewControllerを使う [iOS 10] PlaygroundでUIKitの描画を行う | Developers.IO http://dev.classmethod.jp/smartphone/ios-10-playground-uikit-draw/
■更新
■プロビジョニングプロファイル更新 http://refirio.org/twitter/?date=20160918 iOS Developer Program の契約は続けているのに、全然iPhoneアプリを作っていない…。 posted at 2016/09/18 00:04 ので、久々にMacを起動したけど、Xcodeはバージョンアップされているし、プロビジョニングプロファイルの有効期限は切れているし、再発行してみてもよく解らないエラーが出て実機に書き出せないし。で2時間ほど悩んでいた。 posted at 2016/09/18 00:05 ブラウザで Apple Developer にログインして更新された規約に同意して、Xcode > Preferences > Accounts からプロビジョニングプロファイルを作り直して、プロジェクトの General > Signing > Term で自分の名前を選択。 posted at 2016/09/18 00:11 で再度実機で動くようになった…はず。いろいろ試していたので、何か書き忘れているかもだけど、一応の備忘録として。 posted at 2016/09/18 00:12 Android Studio も、自宅PCではベータ版の時のままだったので最新版に更新。正式版になってから日本語化できなくなったと聞いていたけど、https://t.co/KPFIVflBQO の方法で日本語化できた。 posted at 2016/09/18 00:43 ■Apple Developer Program 更新 Appleにログイン https://developer.apple.com/account/#/overview/HEZ8494358 にアクセス Renew Membership ボタンを押して、利用規約に同意 Appleにログインして支払内容確定 ■「Your iOS Distribution Certificate will expire in 30 days.」メールが来た 「アプリを書き出して公開する」ときに必要な証明書の期限が切れる…というものらしい 公開中のアプリには影響しないようなので、もし「アプリを改良して更新する」ということがあれば、そのタイミングで更新することになるみたい Your iOS Distribution Certificate will expire in 30 days.が来た時の対処法 | Macfancy http://macfancy.com/2015/11/07/your-ios-distribution-certificate-will-expire-in-30-days-%E3%81%8C%E6... iOS - ios一年おきの証明書の更新について(85469)|teratail https://teratail.com/questions/85469 ■その他 Apple Developer で規約への同意が必要になっていないか確認する Xcodeのセッションが切れているときがある。ログインしなおす プロジェクトの General > Signing > Term で「none」を選択し、その後自分の名前を選択すると大丈夫のときがある
■CocoaPods
Swiftで外部ライブラリを追加する(CocoaPods) - Qiita http://qiita.com/YuukiWatanabe/items/98e5f6cb19787b9e95ca Swift で外部ライブラリを追加する - みかづきメモ http://mikazuki.hatenablog.jp/entry/2016/02/28/030000 iOSライブラリ管理ツール「CocoaPods」の使用方法 - Qiita http://qiita.com/satoken0417/items/479bcdf91cff2634ffb1
■Mac操作
Mac Finderの「フォルダへ移動」コマンドの詳しい使い方 / Inforati http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-use-mac-finder-go-to-folder-command... MacOSでfinderからファイルのパスを簡単にクリップボードにコピーする - Qiita http://qiita.com/biatunky/items/e567a8140ddfeef96ffc
■トラブル
【swift】実機テストで「The maximum number of apps for free development profiles has been reached.」というエラーが発生 http://pg.kdtk.net/1369
■その他メモ
iOSアプリ開発の全体像 - Qiita http://qiita.com/gomi_ningen/items/b8c9c5c11aee91be820e 【完全保存版】「iOS 11」新機能・変更点の完全ガイド 押さえておきたい15のポイントを解説 | CoRRiENTE.top https://corriente.top/post-49396/ [Swift 3.0] Playground で URLSession を使う http://dev.classmethod.jp/smartphone/iphone/swift-3-playground-urlsession/ iPad mini2のSwift PlaygroundsでUIKitを使ったHello worldを書いてみた http://kako.com/blog/?p=20856 [iOS8] Swiftでデバッグ出力する方法 http://qiita.com/hiroo0529/items/b84d4e85b5104cb008e8 なんとかストライクとは http://xavier.hateblo.jp/entry/2014/09/22/100201 クエスチョンマークとビックリマーク http://swift-salaryman.com/optional.php 日本語ドキュメント - Apple Developer https://developer.apple.com/jp/documentation/ SBクリエイティブ:絶対に挫折しない iPhoneアプリ開発「超」入門 増補改訂第5版 【Swift 3 & iOS 10.1以降】 完全対応 http://www.sbcr.jp/products/4797389814.html?sku=4797389814 ↑アプリ公開手順のPDFをダウンロードできる ■PDF関連 iOSでPDFを表示してみる メモ http://nonchalanttan.hatenablog.com/entry/2016/11/11/200000 【初心者向け】Swift3で爆速コーディングその1(画面作成とSnippetsの使い方) http://qiita.com/teradonburi/items/d0ffb6367e34966d761b 【iOS開発】Swiftで簡易PDFビューワを作成(PDFを読み込み、表示) http://kerubito.net/technology/1615