Swift:iOSサンプルコード

WKWebViewとモーダルのサンプルコードです。

サンプルコードはここにあります。

  • SampleWKWebView_iOS

Screenshot 2017-12-17 22.35.32

  • SampleModalDelegate_iOS (モーダルサンプル)

Screenshot 2017-12-15 14.15.21(5)

参考:モーダルのサンプルは次のコードを参照しています。内容的には、Xcode 9.2対応し、ボタンを押したらテキストを入力する画面が現れ、テキストを入力し戻るボタンを押すと最初の画面に内容が表示されるように変更しています。いずれのサンプルコードも大変参考になりました。ありがとうございました。

Swift4:WKWebView読み込み

UIWebViewで動作を検証済みのコード(2017.12.17)Screenshot 2017-12-17 19.14.23

WKWebViewで動作を検証済みのコード(2017.12.17)Screenshot 2017-12-17 21.19.49

WKWebViewについて考えていました。

そもそもMesaClipのiOSへの移植をscratch and buildで進める方針にしたものの、WebViewをWKWebViewに変更する段になって大変そうなのでとても戸惑ってしまいました。mainFrameもloadRequestもSwift4 / iOSにはなかったからです。

整理すると次のようになります。全部実装していないので文法的なまちがいがiOS WebViewについては存在するかもしれません。

1. macOS WebViewまとめ

import Cocoa
import WebKit
class ViewController: NSViewController {
@IBOutlet weak var xWebView: WebView!

xWebView.mainFrame.loadRequest(NSURLRequest(URL:”https://www.apple.com/jp/”))

2. iOS WebViewまとめ

import UIKit
class ViewController: UIViewController {
@IBOutlet weak var xWebView: WebView!

xWebView.loadRequest(NSURLRequest(URL:”https://www.apple.com/jp/“))

3. iOS WKWebViewまとめ

import UIKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet weak var xWebView: WKWebView!

xWebView.load(URLRequest(URL:”https://www.apple.com/jp/“))
______________________________________________________________________
let myURL = URL(string: “https://www.apple.com/jp/&#8221😉
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)

結論としては、

  • WKWebViewはloadRequest→load
  • NSURLRequest→URLRequest

Swift4:Table View Cellの使い方

このブログは言うことなし。とてもわかりやすいし、重宝した。

【Swift】Table View Cellの使い方。テーブルに表示するデータ1つ1つの入れ物。

  • tagを使えばcellの中にラベルやボタンを配置できる。
  • ラベルやボタンをプログラムに定義し、接続してはいけない。エラーになる。
  • customのほかに左右に分ける、2行にするなどの機能もある。スクリーンショット 2017-10-27 09.12.18

Swift4:iOS UI画面切り替え

次のアプリ開発に着手しました。全く良くわかっていないので、2つ以上のUI画面を持つ場合、切り替えをどうやればいいか調べました。

TabViewControllerやTabViewControllerItemを使う事例もやってみたのですが、うまくいきませんでした。今のところ、一番簡単な方法はボタンで切り替える方法でした。

参照:Storyboardによる画面遷移まとめ

注意事項:

  • コードを書かなくても、画面制御はできました。
  • ボタンのタイトルはAttributedを選択して定義しました。追加したViewControllerのボタンのタイトルがstoryboard状に表示されません。なぜでしょう?
  • 切り替えがうまく行っているか、textViewを定義しました。size inspectorでこのtextViewと先のボタンを自動拡縮するように指定しないと、バグっているかどうかわからなくなるので要注意です。
  • なお、コードを書かなくても切り替えはできています。

Screenshot 2017-10-15 20.15.06

Screenshot 2017-10-15 21.10.20

Swift4:iCloudコンテナ・サンプルコード

Xcode 9.0 / Swift4にアップデートしたら、これまた大変でした。

toolbar関連で警告エラーが出て、このためにXcodeがほとんど動かなくなり、最終的に修正が終わるまでまともに動きませんでした。かなり重症だったので、Xcodeを削除し、入れ直しました。

主な修正点:

  • writeの修正。詳細はきのうアップしたブログを参照してください。
  • iOSのUIの修正:iPhone 8に対応しました。
  • フォルダ名、プロジェクト名、アプリ名が事情があり変則になっています。対応表をつけました。
  • ソースコードはここにあります。iOSとmacOSの両方のソースコードになります。上部のフォルダのリンクをアップしますので、必要に応じて該当するフォルダを探し出し、ソースコードを取り出してください。
  • ドキュメントはPagesファイルが入っています。

Screenshot 2017-10-13 12.22.58

問題だった箇所:UIToolbar
Screenshot 2017-10-13 15.28.54

便利にMac:Hotspot Shieldのログイン

VPNアプリのHotspot Shieldのログインに失敗したときの再登録の仕方

デバイス数が5を越したとき、さらにもう一本アプリを購入する羽目になり、最終的に5デバイスで管理することになったにも関わらず、ログインIDのメールアドレスを同じにしていたため再ログインができなくなったときのトラブルシューティングの仕方です。

手順的には上記の通りですが、次のようにすれば簡単です。

実際の操作

  1. Activity Monitorを起動してHotspot Shieldを選び、ツールバーのXをクリックし、終了させればいいです。
    Screenshot 2017-10-12 20.37.11
  2. Terminalを起動してdefaults delete com.anchorfree.hss-macと入力しリターンします。
    Screenshot 2017-10-12 20.39.05
  3. Finder→Application→Hotspot Shieldをダブルクリックして起動する。起動後、タスクバーからHotspot Shield UIを表示し、右上のXをクリックします。
    Screenshot 2017-10-12 20.31.19
  4. Hotspot Shieldのアカウントにログインします
    このとき、アカウントで再ログインする画面を出す必要があります。一画面だけ画面取り消しのXが一番下側にあり、スクロールしないとたどり着けません。ここだけが要注意です。

アカウントにログイン後はwebページで確認します。
Screenshot 2017-10-12 20.35.43

参考

  • Quit the Hotspot Shield Application.

  • In the application go to ⚙️ > Quit Hotspot Shield

  • Go to Finder > open the Applications folder > look for Utilities folder and open the Terminal

  • Enter the following command and hit enter.:
    defaults delete com.anchorfree.hss-mac

  • Then open Hotspot Shield from the upper toolbar. You will notice it will look like the first time you installed it.

  • Click on the X at the upper-right corner to by-pass the 7-Days Trial.

  • Click on the upper right gear and select Account.

  • Enter the following Elite credentials and click on Sign In.

Swift4:iCloudコンテナのアクセス(訂正)

Xcode 9.0 / Swift4にアップデートの際、iCloudコンテナのアクセスについてまちがいと適正化のための修正が必要なことがわかりました。

NSFileCoordinator().

  • NSFileCoordinator().coordinate(writingItemAt: wFileURL!, options: .forReplacing, error: nil, byAccessor:{ (newURL) in
    do {
    } catch {
    }
    書き込みは、.forReplacingを指定すれば上書きになるので別途ファイル削除は不要。
  • NSFileCoordinator().coordinate(readingItemAt: wFileURL!, options: .withoutChanges, error: nil, byAccessor:{ (newURL) in
    do {
    } catch {
    }
    読み込みは、元ファイルをsaveする必要がないとき、.withoutChangesを指定する。

iCloudコンテナに接続できないときの処理

  • let wContainerURL  = FileManager.default.url(forUbiquityContainerIdentifier:pID)
    let wDocumentURL = wContainerURL?.appendingPathComponent(“Documents”)
    let wFileURL = wDocumentURL?.appendingPathComponent(pFilename)
    if String(describing: wFileURL?.path).count <= 0 || (wFileURL == nil) {
         self.CallAlert(“”, pIndex:self.C.msg32)
         self.ExecWait(10.0) { }
         exit(0)
    } else { }
  • アプリにiCloud Driveでチェックが入っていないとき、URLがnilになります。
    ① アラートを出す。
    ② Thread.sleep(forTimeInterval: 秒) ですぐにアラートが消えないよう一定時間待つ。
    ③ exit(0)で強制終了する。NSApplication.shared.terminate(self) だと異常終了(exception error)になる。

スクリーンショット 2017-10-12 05.08.22

Swift4:アプリアイコン1024

あれっ・・・、iPhone8対応ができていない。

Simulatorでアプリアイコンが表示されないことが判明。原因不明。

  • Previewでexportするときにアルファチャネルを除去
  • AppIconを再度入れ直し
  • Xcode→Productでoptionキーを押したままでClean build folder…を実行
  • Simulatorを終了してからbuild
  • あれっ・・・、うまくいかない

このあと何かを触ったら、うまく行きました。原因不明。

参考:[iOS] iTunes Connect の申請でPNGファイルにアルファチャンネルが含まれていて申請に使えないときの対処

これは厳しいでした。

しかし、時間はかかっていますが、現在まで次の作業が終わりました。

  • 5本のアプリをXcode 9.0 / Swift 4に対応
  • 全アプリの英語・日本語マニュアルの修正・形式の統一
  • 全アプリの英語・日本語スクリーンショットの修正
  • 全アプリのクイックスタートのためのデフォルトデータを整備