Just My Life & My Work

Posts tagged ‘framework’

[iOS] 從Fabric Crashlytics遷移Firebase Crashlytics

由於時代不停的變遷,使得必須從Fabric Crashlytics遷移Firebase Crashlytics

自從2017年Google收購Fabric,我之前所整合的Answers和Crashlytics就逐漸被整合到Firebase。遙想2017年我還在看Fabric後台,很有成就感地看著我開發的HiLifeNissan。文章:Fabric Crashlytics 崩潰紀錄

(繼續閱讀…)

[iOS] 使用Vision人臉偵測 (Face Detection Using Vision)

早在2013年,我就把玩過iOS的人臉偵測 (Face Detection),當時覺得非常酷!因為已經能在手機上玩人臉偵測,回想2011年,我還在研究電腦上OpenCV,那時可是我研究所樂趣之一呢~

時光飛逝來到2017年,Apple在WWDC上發佈Vision Framework,裡頭實現更強大的人臉偵測。

(繼續閱讀…)

[iOS] 透過HealthKit獲取步數與距離

原本想透過智慧運動裝置來獲取步數與距離,可惜遲遲等不到韌體開發完成,只好暫且透過HealthKit獲取步數與距離!因為iPhone本身就有運動感測器,會自動算出步數與距離,然後寫入HealthKit,想做運動健康相關App,於是有數據來源可使用。

iOS 10開始之後要在info.plist設定Privacy

(繼續閱讀…)

[iOS] Local Notification (本地推播)

自從iOS10開始,Apple整合並重構原本復雜的SDK,特別是本地推播 (Local Notification)遠程推播 (Remote Notification),已經統合為專門處理的User Notifications Framework

五年前(不小心透露年齡⋯⋯)我已介紹過Local Notification,文章可見:Remote/Local Notification

整合過後,推播變得更好管理,於是我們要逐漸捨既舊有的實作習慣囉~

[iOS] Local Notification (本地推播).PNG

(繼續閱讀…)

關於 Swift 4.1

最近又「逼不得已」要更新Xcode 9.3(原9.2),原本沒有很想趕上潮流,不過因為老闆把自己的iPhone升級到11.3,我要幫他灌App測試,Xcode就跳出不支援該版本⋯⋯使得我被迫要升級Xcode!更沒想到的是,要安裝Xcode 9.3,還要先升級Mac OS 10.13(原10.12.6),這過程要花我整個下午的時間啊⋯⋯

本篇議題是關於 Swift 4.1,Xcode 9.3就能以Swift編程,以為只是小更新並不大礙,沒想到我所使用的Libray/Framework出現問題!!!

Swift第4版本提到Charts套件超好用,它要以Swift 4.0來編譯,所以要到某處選擇設定。今日更新到Swift 4.1

關於 Swift 4.1 Xcode2

想說編譯執行會很順利,誰知出現⋯⋯

關於 Swift 4.1 Xcode1

這不符合Swift版本問題很神奇啊~

error: The following binaries use incompatible versions of Swift:
/Users/happyboy/Library/Developer/Xcode/DerivedData/TestDeviceSDK-deuhrepxfcygzyguaogwmklmzddz/Build/Products/Debug-iphoneos/TestDeviceSDK.app/Frameworks/Charts.framework/Charts
/Users/happyboy/Library/Developer/Xcode/DerivedData/TestDeviceSDK-deuhrepxfcygzyguaogwmklmzddz/Build/Products/Debug-iphoneos/TestDeviceSDK.app/Frameworks/Zip.framework/Zip

目前還在找解法ORZ,依然有經驗地翻舊文章下載舊版Xcode,先成功編譯後推Git。

想問熟悉寫Swift的高人,到底有多少時間在改Swift語法和設定呀⋯⋯

參考:Swift和Objective-C混編的注意啦

[iOS] 使用 Core ML Model (Using Core ML Model)

研究所時代有旁聽機器學習課程,當時有親自操作SVM來產生model,可參考最近七年度以來一直很夯的文章:支持向量機器 (Support Vector Machine)。此時想要在iOS上使用SVM model要怎麼做呢?好在Apple釋出轉換model工具,再配合2017年釋出的Core ML,就能輕易在iOS上使用該model

Using Core ML Model.png

.

在此跳過轉換model的部分,直接進入套用已轉好的Core ML Models。不管你是阿貓還是阿狗做出來的model,都能透過Apple的轉換工具變身為飛天阿貓阿狗給App使用XD~

WWDC 2017 - Core ML Model2

(繼續閱讀…)

[iOS] 靜態庫、動態庫、Framework的區別

持續使用Cocoapods來管理第三方套件,主要還是以Objective C來開發專案的我,有時候需要使用Swift的Open Source,才發現靜態庫、動態庫、Framework的區別要好好了解一下:P~

iOS 靜態庫、動態庫、Framework的區別 cocoapods.png (繼續閱讀…)

[iOS] 取得本機相片 (Fetch Photos from Photo Library)

現代人使用智慧手機已經脫離不了「相機」,於是許多應用需要取得本機相片 (Fetch Photos from Photo Library),我們開發者要怎麼做,才能輕易取得使用者珍貴的相片呢?

取得本機相片 (Fetch Photos from Photo Library).jpg

(繼續閱讀…)

[iOS] Objective C與Javascript的溝通

App和Web雙向溝通:

  • Call Javascript function from Objective-C
  • Call Objective-C function from Javascript

一直是我們想要達成的目標,而先前的兩篇文章:

也就分別實現雙向溝通,只是過程不夠直接,且會衍生一些毛問題。以至於有開源WebViewJavascriptBridge已有6000多顆星,儘管我沒用過XD~

這套件自我介紹:

An iOS/OSX bridge for sending messages between Obj-C and JavaScript in UIWebViews/WebViews

iOS 7以後,SDK發展出JavaScriptCore FrameworkObjective C與Javascript的溝通變得更便利!

(繼續閱讀…)

[iOS] WatchKit 與 UIKit

Apple Watch即將上市,對iOS開發者而言,無疑是個一定要了解的全新裝置,特別是在使用者體驗上,如何設計適合小螢幕的界面。這種改變從電腦轉移到手機已經歷過一次,如今要從手機移轉到手錶,螢幕可是越變越小呢~

手機上所呈現的界面是透過UIKit framework,而手錶所呈現的界面則是透過WatchKit framework,這兩者有相似的地方,也有許多不一樣的地方

WatchKit 與 UIKit

基本上,WatchKit是UIKit的簡化版,之後Apple應該會根據需求新增修改些property或method。一般而言,手錶的功用是瀏覽重於互動,所以framework少有互動的設計。

WatchKit的元件

WKInterfaceObject繼承於NSObject。WKInterfaceImage繼承於WKInterfaceObject、WKInterfaceLabel繼承於WKInterfaceObject,其餘依此類推,都是繼承於WKInterfaceObject。

其property與method也很陽春,只有一些基本的設定。

  • WKInterfaceObject

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <WatchKit/WKDefines.h>

WK_CLASS_AVAILABLE_IOS(8_2)
@interface WKInterfaceObject : NSObject

- (instancetype)init NS_UNAVAILABLE;

- (void)setHidden:(BOOL)hidden;
- (void)setAlpha:(CGFloat)alpha;

- (void)setWidth:(CGFloat)width;   // setting to 0 means use natural size. ignored for table
- (void)setHeight:(CGFloat)height;

@property(nonatomic,readonly,copy) NSString *interfaceProperty;   // same as controller's property name

@end

@interface WKInterfaceObject (WKAccessibility)

- (void)setAccessibilityLabel:(NSString *)accessibilityLabel;
- (void)setAccessibilityHint:(NSString *)accessibilityHint;
- (void)setAccessibilityValue:(NSString *)accessibilityValue;

@end
  • WKInterfaceImage

#import <Foundation/Foundation.h>
#import <WatchKit/WKDefines.h>
#import <WatchKit/WKInterfaceObject.h>

@class UIImage;

WK_CLASS_AVAILABLE_IOS(8_2)
@interface WKInterfaceImage : WKInterfaceObject

- (void)setImage:(UIImage *)image;
- (void)setImageData:(NSData *)imageData;
- (void)setImageNamed:(NSString *)imageName;

- (void)startAnimating;	      // play all images repeatedly using duration specified in interface description
- (void)startAnimatingWithImagesInRange:(NSRange)imageRange duration:(NSTimeInterval)duration repeatCount:(NSInteger)repeatCount; // play subset of images for a certain number of times. 0 means repeat until stop
- (void)stopAnimating;

@end

我們很驚訝地發現,居然沒有frame這個特性!也就是我們無法設定其座標(但可設定長與高),也無法使用Auto Layout。實際上,WatchKit界面元件只能在格子中透過邊界相對位置來放置。

還有許多特性需要好好了解,因為本來就不該把手錶當作手機來設計,而簡化自然有其好處!持續去研究吧~

參考:WatchKit – NSHipster。

標籤雲