override func viewDidLoad() { super.viewDidLoad() let stringUrl = "http://hpscript.com/swift/index.php" let url = URL(string: stringUrl) let request = URLRequest(url: url!) let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: OperationQueue.main) let task:URLSessionDataTask = session.dataTask(with: request, completionHandler: {(data, response, error) in if error != nil { print(error!) return } DispatchQueue.main.async{ } }) task.resume() // Do any additional setup after loading the view, typically from a nib. }
Category: Swift / SwiftUI
SwiftyJSONをダウンロードしよう
JSONにはSwiftyJSONを使っている、と言うことでgithubからswiftyJSONをダウンロードします。
zipでdownloadして、SwiftyJSON-master -> Source のSwiftyJSON.swiftを抜き取ります。
JSONDecoderがうまく行かない
override func viewDidLoad() { super.viewDidLoad() let listUrl = "http://hpscript.com/swift/index.php" do { guard let url = URL(string: listUrl) else { return } URLSession.shared.dataTask(with: url){(data, response, error) in if error != nil { print(error!.localizedDescription) } guard let data = data else { return } let json = try? JSONDecoder().decode([JsonSample].self, from: data) }.resume() } catch{ } self.label.text = json[0].name // Do any additional setup after loading the view, typically from a nib. }
なぜだ!!!!?
swift4でmysqlからfetchしたjsonを取得する
まず、mysqlからpdoでselectして、jsonにする。
$response = array(); $dsn = "mysql:dbname=app;host="; $user = ""; $password = ""; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e){ print('connection failed:'.$e->getMessage()); } $sql = "select * from swift"; $stmt = $dbh->query($sql); $i = 0; foreach($stmt as $value){ $response[$i]['name'] = $value['name']; $response[$i]['member'] = $value['member']; $i++; } echo json_encode($response); echo "finish";
勿論ここまではOK
問題は、x-codeで取得して、どう表示するか。
swift4からmysqlにinsertする
uiview.controller
let URL_SAVE_BOY = "hoge" @IBOutlet weak var NameFeild: UITextField! @IBOutlet weak var oldFeild: UITextField! @IBAction func saveBtn(_ sender: Any) { let requestURL = NSURL(string: URL_SAVE_BOY) let request = NSMutableURLRequest(url: requestURL! as URL) request.httpMethod = "POST" let teamName = NameFeild.text let memberOld = oldFeild.text let postParameters = "name="+teamName!+"&old="+memberOld!; request.httpBody = postParameters.data(using: String.Encoding.utf8) let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in if error != nil { print("error is \(error)") return; } do { let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary if let parseJSON = myJSON { var msg : String! msg = parseJSON["message"] as! String? print(msg) } } catch { print(error) } } task.resume() }
php側
$response = array(); if($_SERVER['REQUEST_METHOD'] == 'POST'){ $teamName = $_POST['name']; $member = $_POST['old']; } $dsn = "mysql:dbname=db;host=hostname"; $user = "username"; $password = "pwd"; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e){ print('connection failed:'.$e->getMessage()); } $sql = "insert into swift (name, member) VALUES (:name, :member)"; $stmt = $dbh->prepare($sql); $stmt->bindParam(':name', $teamName, PDO::PARAM_STR); $stmt->bindValue(':member', $member, PDO::PARAM_INT); $stmt->execute(); $response['api'] = "succeeded"; $response['member'] = $member . " years old!"; echo json_encode($response); echo "finish";
エミュレーターでyyyy, 55と入れます。
DB側
今回は,phpadmin
ちゃんと入っています。
次は、
1.mysqlからfetch。
2.配列をtable viewから表示
3.ec2から接続する
4.androidのDB接続
5.photoshopのエレメントをxcodeに乗せてく
6.app構築
7.app storeに申請
ってところか。
う〜、、、やること思ってたより多い。
table view
table viewでインド人に作ってもらった。
import UIKit class CategoryListVC: UIViewController,UITableViewDataSource,UITableViewDelegate { //MARK:- IBOutlets @IBOutlet var tblCategoryList: UITableView! //MARK:- Variables var arrCategoryListData = NSMutableArray() override func viewDidLoad() { super.viewDidLoad() self.setupUI() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //MARK:- SetUp UI func setupUI() -> Void { self.tblCategoryList.delegate = self self.tblCategoryList.dataSource = self self.arrCategoryListData = [["Name":"Motors"],["Name":"Fashion"],["Name":"Electronics"],["Name":"Collectibles & Art"],["Name":"Home & Garden"],["Name":"Sporting Goods"],["Name":"Toys & Hobbies"],["Name":"Bussiness & Industrial"],["Name":"Music"]] self.tblCategoryList.reloadData() } //MARK:- UITableView Related Methods func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 50 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.arrCategoryListData.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewFOrCategoryListing", for: indexPath) as! TableViewFOrCategoryListing guard let dictCell = self.arrCategoryListData.object(at: indexPath.row) as? NSDictionary else { return cell } if let price = dictCell.value(forKey: "Name") { cell.lblCategoryName.text = String(describing: price) } return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) guard let dictCell = self.arrCategoryListData.object(at: indexPath.row) as? NSDictionary else { return } if let objView = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as? ViewController { objView.dictForCategoryDetails = dictCell self.navigationController?.pushViewController(objView, animated: true) } } } class TableViewFOrCategoryListing: UITableViewCell { @IBOutlet var lblCategoryName: UILabel! }
やべー、俺も早く頑張らないと。。
swift4でARアプリを作ろう
まず、Augmented Reality Appを選択する必要がある。
AppDelegate.swift, ViewController.swift, Main.storyboard, LaunchScreen.storyboard, Info.plist は同じだが、art.scnassetsが追加されている。
viewController.swift
デフォルトでvr体験できるようになってますね。
import UIKit import SceneKit import ARKit class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! override func viewDidLoad() { super.viewDidLoad() // Set the view's delegate sceneView.delegate = self // Show statistics such as fps and timing information sceneView.showsStatistics = true // Create a new scene let scene = SCNScene(named: "art.scnassets/ship.scn")! // Set the scene to the view sceneView.scene = scene } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Create a session configuration let configuration = ARWorldTrackingConfiguration() // Run the view's session sceneView.session.run(configuration) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // Pause the view's session sceneView.session.pause() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Release any cached data, images, etc that aren't in use. } // MARK: - ARSCNViewDelegate /* // Override to create and configure nodes for anchors added to the view's session. func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { let node = SCNNode() return node } */ func session(_ session: ARSession, didFailWithError error: Error) { // Present an error message to the user } func sessionWasInterrupted(_ session: ARSession) { // Inform the user that the session has been interrupted, for example, by presenting an overlay } func sessionInterruptionEnded(_ session: ARSession) { // Reset tracking and/or remove existing anchors if consistent tracking is required } }
NIFCloud-mbaasをx-codeに入れよう
githubを開きます。
https://github.com/NIFCloud-mbaas/ncmb_ios/releases
最新版のv2.4.3をダウンロードします。
プロジェクトフォルダのxxx.xcodeprojと同じ階層にダウンロードしたフォルダncmb_ios-2.4.3を置きます。
x-codeを立ち上げて、xxxx.xcodeprojから、Build Phasesを開く。
Link Binary With LibrariesでNCMBを開く。
続いて、AppDelegate.swiftと同じディレクトリにxxx-Bridging-Header.hを作成する。
あ、NBCM.frameworkでないとダメのようですね。
はあ?エラーが消えた!!!
なにこれ?
APNs(Apple Push Notification Service)
1.ユーザーがpush通知許可
2.APNsがユーザーにデバイストークンを発行
3.ユーザーがサーバーにデバイストークン登録
4.サーバーがAPNsにプッシュ通知
5.APNsがユーザーにpush通知
サーバーはニフティクラウド mobile backendを使うらしい。
http://mb.cloud.nifty.com/
mBaaSというらしい。
とりあえず、登録してましょう。
ああ、これかー、application keyとclient key
macキーチェーンアクセスでCSR(Certificate Signing Request)を取得する
まず、キーチェーンアクセスって何処にある?ジャッキーチェーン?
最初に、Utilitiesを開きます。
utilitiesから、Keychain Accessを開きます。
なんだ、簡単。
次に、Keychain Accessから、Certificate Assistant -> Request a Certificate From a Certificate Authority… を開きます。
Certificate Informationのformが開くので、User Email Addressにmacのdeveloperで登録しているメールアドレス、CA Email Addressは空欄、Request is:は、saved to disk と Let me specifiy key pair informationをチェックします。
そうすると、保存場所を聞かれるので、適当にDesktopにでも保存します。
key pair informationはそのまま、RSA 2048bitでcontinueします。
できました。OK