2019年10月30日 星期三

swift 5: 關於 iPad 10.2" iPad OS 13.2 Xcode Debug

關於 iPad 10.2" iPad OS 13.2 Xcode Debug
 這台iPad (7th)10.2"台灣於11月初才開始銷售
 如果直接更新到 13.2 會造成 Xcode 11.1以前的版本偵測錯誤

UIScreen.main.bounds
 單位: point
 Width 1024
 High 768

 iPad (7th)
 UIScreen.main.bounds
  單位: point
  Width 1080
  High 810

 UIScreen.main.nativeBounds
  單位: pixel
  Width 1620
  High 2160

 方案一. 別更新到 iPad OS 13.2

 方案二. 請下載 Xcode 11.2
   如果你把 macOS 升級到  Catalina 10.15.1
   有可能每次開啟 Xcode時發生 "正在驗證Xcode 11.2"
   那就把Xcode 11.2移除, 重新安裝Xcode 11.2
 
   先安裝Xcode 11.2再升級到 Catalina 10.15.1, 整個macOS 變的超級慢,
   請看這邊  macOS: 關於macOS 10.15 Catalina 安裝


 方案三. 降級回到 iOS 13.1.2
   但iPad每天會提醒要更新到 13.2 超級煩的

    [降級教學] 如何替新版 iOS 13 降回舊版 iOS 13.1.3 攻略技巧

   如果您有 Apple Developer Account 可以直接到 Apple 官方網站各種韌體iPSW下載
      iOS 各系列 Restore Images
      iPad OS 各系列 Restore Images
 
   也可以到這邊點選下載
   iOS 13 / iPadOS 13 各版本認證伺服器狀態 
   iPadOS 13正式版各種韌體iPSW下載清單含認證狀態
   iPadOS 13.1.3 正式版(17A878) iPSW官方下載點 (2019.10.16)

  使用 iTunes回復iPad, 要先關閉 iPad的 Find My功能
  iPad -> Setting -> Password & Account -> Find My-> Find My iPad -> Off

  How to Use IPSW File to Restore iPhone iPad with iTunes(Dass Loss)
   Hold Alt key (on Mac) or Shift key (on Windows) and click on the “Restore” button from your iTunes.




2019年10月25日 星期五

swift 5: 關於移除 Xcode simulator images file

關於移除 Xcode simulator images file
 這些檔案都滿大的, 如果不須要, 可以手動移出
  目錄所在: /Library/Developer/CoreSimulator/Profiles/Runtimes

 解決方案來源:
  Can I delete unnecessary device simulators of Xcode?


 Xcode 11開發工具新的功能解說
    註: 可以打開右下角的三個點, 可以顯示字幕(有簡體中文)
 Apple WWDC 2019 What's New in Xcode 11

Xcode 11開發工具模擬器功能解說
  Apple WWDC 2019 Getting the Most Out of Simulator


 

2019年10月24日 星期四

swift 5: 關於iOS 13.x 深色模式及Label文字顏色差異

深色模式會對APP 產生一響
 請看這一篇
  Apple WWDC 2019 SwiftUI Essentials video
    註: 可以打開右下角的三個點, 可以顯示字幕(有簡體中文)
  天生支援 dark mode 的 SwiftUI Color

 也就是說
  原本 light 模式中, Label Font Color Deuault是黑色
  APP畫面就會呈現為白底黑字

 但轉換為 dark模式
  Label Font Color Deuault是白色
  如依原本設計, 就會變成白底白字畫面, 白色字體就看不到了
  因此就要轉換畫面底色為黑色
  但原來的 Button 圖片是黑色外框, 這時就發生鋸齒,
  Button 圖片也要一起更換重畫.

解決方案來源:
 How to check if Dark Appearance is enabled tvOS
 Apple Developer UI Element Colors
 Apple Developer UIColor


 請在 info.plist增加一個Key
 <key>UIUserInterfaceStyle</key>
   <string>Automatic</string>


判斷是否為 iOS13
    if #available(iOS 13.0, *)
    {
     // Fallback on 13.0 versions
      checkInterfaceStyle()
    } 
    else 
    {
     // Fallback on earlier versions
    }

取得 brightness mode

 func checkInterfaceStyle()
 {
   guard(traitCollection.responds(to: #selector(getter: UITraitCollection.userInterfaceStyle)))
      else { return }

   let style = traitCollection.userInterfaceStyle

    switch style
    {
     case .light:
       print("light")
     case .dark:
       print("dark")
     case .unspecified:
       print("unspecified")
     @unknown default:
       print("unknown default")
       fatalError()
    }
 }


這是一個 Label Text 在新舊版本之間的程式差異

Main Storyboard中畫面的設定如下
 Main View 的 Background 設定為 System Background Color
  System Background Color light Mode 其實是白色
  System Background Color dark Mode 其實是黑色
 Label Color 設定為 Defalut( Label Color)
  Defalut Label Color light Mode 其實是黑色
  Defalut Label Color dark Mode 其實是白色


   if #available(iOS 13.0, *)
   {
    if( MyLabel.textColor != UIColor.label)
    {// 黑底白字, 只適用於 iOS 13.0以上版本
     MyLabel.textColor = UIColor.label
    }
   }
   else
   {  // Fallback on earlier versions
    if( MyLabel.textColor != UIColor.darkText)
    { // 白底黑字
     MyLabel.textColor = UIColor.darkText
    }
   }



2019年10月23日 星期三

swift 5: 關於iOS偵測網路連線方法

 在 iOS 12以上, 已新增 Network framework - NWPathMonitor 偵測網路連線
 如果是 iOS 12之前可以使用 Reachability.swift

 解決方案來源:

 Class NWPathMonitor
 
 利用 NWPathMonitor 偵測網路連線
 
 Detecting Internet Access on iOS 12+
 
 Reachability.swift
 
 橋接第三方 Objc Library - Reachability and Bridge.h
 

2019年10月21日 星期一

macOS: 關於macOS 10.15 Catalina 安裝後變慢的原因

/*======================================
  終於查出Catalina 變慢的原因
  因為我的macOS 電腦中有很多個版本的 Xcode  (放在'下載'的目錄中)
  Catalina會把硬碟中所有的檔案都掃描並驗證
  驗證完成後, 會把APP加入到啟動台中

  方案一:
  把 '下載'的目錄中, 所有的Xcode  及其他APP都刪除(移放到另一個Windows 10的分享目錄中)
  速度就變快了....

  方案二:
   等待 Catalina 把硬碟中所有APP 都驗證完成....

  如果有安裝防毒軟體, 請更新為最新版.

/*======================================
系統已更新到 macOS Catalina 是無法用APP Store 下載舊版Mojave轉為Bootable USB Disk
請務必先用舊版的做好Mojave Bootable USB Disk 後, 再更新到 macOS Catalina.

/*======================================
   我現在的狀況是先安裝Xcode 11.2再升級到 Catalina 10.15.1
   整個macOS 變的超級慢, 最後只能重裝macOS試看看
   心態崩潰中....

   上網一查 還真的有人和我一樣
     MAC OS Catalina 10.15.1更新完後整體速度超慢


/*======================================
 如何在 VM Ware中安裝  macOS Catalina
 參考這網站的教學 (必須有mac電腦自行製作 DMG Image File)
 這方法也可以備份現在正在使用的 mac電腦使用的 macOS
  How to Install macOS 10.15 Catalina on VMware on Windows PC


 直接下載 macOS Catalina 實體 DMG Image File
  Download macOS Catalina Final Version  (Final Version (19A602) 15 Oct 2019)

如果想重新安裝 macOS
 參考這網站的教學
  如何製作 macOS 專屬 USB 系統安裝、重灌隨身碟

更新 macOS Catalina後, 開機速度變慢
可參考這網站的教學
  macOS Catalina Slow? How am I able to fix it

VM Ware中的macOS Catalina如何和Windows分享檔案
 參考這網站的教學
  How to Transfer Files Between Mac and Windows PC

Windows:關於 XMind 這一套軟體

關於 XMind 這一套軟體
 由其是在撰寫 IEC-62304 時還滿有用的
 不想用 Power point或 Visio畫一些圖
 可以試試這個, 簡單又乾淨
 XMind 和 Visio 可以互補

 XMind 官網

 安裝好後, 第一次執行時, 要求註策的畫面
 選擇"Skip"



關於 Understand這一套軟體


 軟體工程師應該測試一下
 滿有趣的一套軟體
 尤其是上層要求一些流程圖
 但又不想花太多的時間在這些無意義的畫圖上
 可以試試這個
 滑鼠點一點就可以印出一大堆"流程圖"

 由其是在撰寫 IEC-62304 時還滿有用的
 把專案中一些不需要的檔案和函式移除後
 直接產生一些圖, 可以充充版面....

 Scientific Toolworks Understand
 其他檔案在 downloadly.ir 可以找到

 Understand 使用指南(中文)




2019年10月16日 星期三

swift 5: 關於 bit 的處理方法

關於 bit 的處理方法
 MCU端資料都是以 bit為單位處理

 當MCU資料經過 Bluetooth 傳輸到 iOS
 要如何將資料以bit 拆開
 請參考下面
  IOS--swift BLE藍牙通信管理(多設備)

  func convert83(data:[UInt8])
  {
   ....
  }

 高階語言對bit處理真的很痛苦.
 另一個方法, 把接收到的資料放到 Object-C Function 處理後
 再送回 Swift Function中.

swift 5: Assets.xcassets 圖片的大小

 Assets.xcassets 圖片的大小
 圖片的1x 2x 3x 是何意思
 請看這一篇
  Xcode: 實驗image view中的 1x 2x 3x

 但這樣就要準備很多不同大小的 JPG或 PNG圖檔
 現在有更省時的方法
 如果是用 illustrator畫圖, 可以直接另存新檔為
 illustrator: 檔案->另存新檔->存檔類型: adobe pdf
 再把 pdf檔直接拖拉到 Xcode的Assets.xcassets 中
 請看這一篇
  丟掉 PNG/JPEG 讓 Xcode 擁抱 PDF 吧


 這邊有世界各國的國旗
 List of country flags (png) by ISO3


2019年10月8日 星期二

swift 5: iOS 13.x UINavigationController 全螢幕顯示

iOS 13.x UINavigationController 全螢幕顯示
 在 iOS 12.x以前 UINavigationController會自動 Full Screen
 但 iOS 13.x  UINavigationController 已預設為縮小
  一縮小後, 所有元件的位置也都亂了

解決方案來源: 
 Presenting modal in iOS 13 fullscreen

 View Controller Presentation Changes in iOS 13


  let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
  let MyTableViewNvc = storyBoard.instantiateViewController(withIdentifier: "MyTableViewNvcId") as! UINavigationController
  
  MyTableViewNvc.modalPresentationStyle = .fullScreen  // 增加這一行
  
  let myTableViewVc = storyBoard.instantiateViewController(withIdentifier: "MyTableViewVcId") as! MyTableViewVc
  navigationController.pushViewController( myTableViewVc, animated: true)
  self.present( MyTableViewNvc, animated: true, completion: nil)

或者



2019年10月7日 星期一

iOS swift 5: 一些好的網站

UIKit · Swift 起步走

SwiftGG-走心的Swift 翻譯組

NSHipster-关注被忽略的 Objective-C、Swift 和 Cocoa 特性

航歌-Swift

青玉伏案 - Swift

青玉伏案 - iOS開發

Mr.林的博客- iOS開發日記

iT 邦幫忙鐵人賽-Swift菜鳥的30天系列

LikeABosshttps://likeabossapp.com/App

iOS:macOS Books

iOS網絡高級編程:iPhone和iPad的企業應用

Tools for UI Debugging in iOS

IOS app開發介紹 - 不同class溝通方式

IOS--swift BLE藍牙通信管理(多設備)

iOS藍芽開發CoreBlueTooth庫核心方法使用介紹

開發者指南:如何利用 Core Bluetooth 製作一個監控心率 App

iOS藍牙原生封裝

Bluetooth Low Energy in iOS Swift


教學 macOS vs VMware 

Unwind Segues in Swift 5 - Flawless iOS - Medium


iOS swift 5: iOS 13.x CoreBluetooth Framework 發生 sigabrt錯誤

iOS 13.x CoreBluetooth Framework 發生 sigabrt錯誤

簡單的說 就是只要使用到 CBCentralManager, 就要增加這個Key
在 info.plist 增加 NSBluetoothAlwaysUsageDescription 機碼

 Privacy – Bluetooth Always Usage Description
  NSBluetoothAlwaysUsageDescription

如果要能在 iOS 12.x 繼續使用, 則保留以前使用的 NSBluetoothPeripheralUsageDescription

實務上,  info.plist 共使用下面幾個
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>Play with BLE Compatible devices</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Play with BLE Compatible devices</string>
<key>UIBackgroundModes</key>
<array>
<string>bluetooth-central</string>
<string>bluetooth-peripheral</string>
</array>


如果系統設定的 Privacy -> Bluetooth -> authorized被關閉
程式的 central.state就會回傳 .unauthorized









 func centralManagerDidUpdateState(_ central: CBCentralManager)
 {
   switch( central.state)
   {
    case .poweredOff:
        // "Bluetooth powered off"
    case .poweredOn:
        // "Bluetooth powered on"
        // Do Scanner Peripherals
    case .resetting:
        //   
    case .unauthorized:
        // "Bluetooth unauthorized"
    case .unknown:
        // 
    case .unsupported:
        // 
    default:
        // 
   }
 }

 另外別太相信有些教學的 RePaired功能
 已經把 Peripherals 斷電, 但 retrievePeripherals() 還是回傳找到 Peripherals....
 我的作法是重新呼叫 CBCentralManager.init() 一且重頭來
 這也是為何連線一些藍芽耳機要把藍芽關閉重開的原因

解決方案來源:
The Ultimate Guide to Apple’s Core Bluetooth
Property List Key: NSBluetoothAlwaysUsageDescription
 A message that tells the user why the app needs access to Bluetooth.


Bluetooth permission recommendation in iOS 13

2019年10月1日 星期二

ubuntu18.04修改 mysql root 密碼

ubuntu18.04修改 mysql root 密碼

//=============================
MySQL 效能監測工具 
 > sudo apt-get install mytop
 > mytop -u root -p

//=============================
> sudo nano /etc/mysql/debian.cnf
[client]
user     = debian-sys-maint
password = EyCgb3wHDcOwaCH4

> mysql -u debian-sys-maint -p
輸入上面debian.cnf中的那一組password密碼
進入 mysql指令後 依序 輸入下面指令
 mysql> update mysql.user set authentication_string=password('新的root密碼') where user='root' and Host ='localhost';
 mysql> update mysql.user set plugin="mysql_native_password";
 mysql> flush privileges;
 mysql> quit;

> sudo service mysql restart
> mysql -u root -p
 輸入上面已更新後的密碼

//=============================
mysql 5.7設定 提供外部連線(remote connect)
> sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
 #bind-address = 127.0.0.1

> mysql -u root -p
輸資料庫mysql 的密碼
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密碼' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit

啟用和停用防火牆
> sudo ufw enable
> sudo ufw disable
> sudo ufw allow in 3306
> sudo ufw allow out 3306
> sudo ufw status
> sudo ufw statusverbose
> sudo ufw delete 3306

BUG: ubuntu 18.04 ufw 開機自動啟動會失效

//=============================
安裝完成後可以嘗試使用MySQL Workbench或Navicat Premium進行連線測試
下載工具軟體 MySQL Workbench 8.0.17
下載工具軟體 Navicat Premium

https://www.navicat.com/en/download/navicat-premium
 Linux download navicat121_premium_en_x64.tar.gz
 > tar xvf navicat121_premium_en_x64.tar.gz
 > cd navicat121_premium_en_x64
 > bash start_navicat
 - 選擇 install
 - 退出 navicat
 - 安裝 Wine
   參考 https://magiclen.org/wine/
 > sudo dpkg --add-architecture i386 && wget -O - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - && sudo apt-add-repository "deb  https://dl.winehq.org/wine-builds/ubuntu/ $(cat /etc/os-release | grep UBUNTU_CODENAME | cut -d '=' -f 2) main" && sudo apt update && sudo apt install --install-recommends winehq-stable
 > wine uninstaller
 - 點選wine 畫面右上角 安裝
 - 選擇 Navicat-keygen.exe  (這是12.1.20版本的中所含的)
   參考 downloadly.ir
   或 DoubleLabyrinth
 - 選擇 \home\xxx\download\navicat121_premium_en_x64\Navicat\Navicat.exe
 - 選擇 patch
Windows版本教學 在這邊





Ubuntu 18.04 安裝 iredmail 0.9.9 Server



 解決方案來源:
   How to Easily Set Up a Full-Featured Mail Server on Ubuntu 18.04 with iRedMail

   Install iRedmail, Open-Source Mail Server, on Ubuntu


 注意事項:
  請下載 iRedMail-0.9.9.tar.bz2 版本就好
  iRedMail-1.0-beta1已將port 25關閉, 設定比較麻煩.


   > sudo apt update
   > sudo apt upgrade
   > sudo reboot  重新開機
  最好再做一次
   > sudo apt update
   > sudo apt upgrade

   > sudo hostnamectl set-hostname mail.MyDomain.com
   > sudo nano /etc/hosts
     Add Line
     127.0.0.1       mail.MyDomain.com localhost
   > hostname -f

   > wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.9.tar.bz2
   > tar xvf iRedMail-0.9.9.tar.bz2
   > cd iRedMail-0.9.9
   > chmod +x iRedMail.sh
   > sudo bash iRedMail.sh

Web Server 選擇 Nginx
Database 選擇  MySQL
防火牆的選項都選擇 Y

安裝完成後 重新開機
   > sudo reboot