iOS App 從背景回到前景時呼叫 ViewController

一般來說當 App 從背景回到前景的時候,會在 AppDelegate.m 呼叫
-(void)applicationDidBecomeActive:(UIApplication *)application
這行來通知 App 回到前景,可以做些相對應的動作,例如,如果有接 Facebook Login,此時會呼叫
[FBAppEvents activateApp];
來通知 Facebook SDK 說使用者已經完成(或取消)登入。

但是這無法通知某個正在前景的 ViewController 做些相對應的動作,透過 AppDelegate 加上一些複雜的程式可以辦到,不過另一個更簡單的方式是監聽 NSNotificationCenter 的 UIApplicationDidBecomeActiveNotification 事件:

[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(viewDidBecomeActive)
name:UIApplicationDidBecomeActiveNotification
object:nil];

當收到 UIApplicationDidBecomeActiveNotification 事件時,呼叫自訂的 viewDidBecomeActive 函式,就可以收到 App resume 的通知,進行相對應的動作了!

升級到 Xcode 6 後,專案無法再以 Xcode 5 編譯的問題

一般來說專案就算用 Xcode 6 開啟過,仍然可以回去用 Xcode 5 開啟編譯,但是一旦開始大量使用 Constraints 之後,會發現專案可能無法再以 Xcode 5.x 編譯,錯誤訊息為:

「The document “XXX” requires Xcode 6.0 or later.」以及「This version does not support constraints to layout margins. Open this document with Xcode 6.0 or later.」

The document requires Xcode 6.0 or later

Microsoft //Publish 2014 Hackathon 駭客松

今年微軟終於推出了 Universal App,讓 Windows 8.1 和 Windows Phone 8.1 可以直接以同一個專案開發,也終於可以在 Windows Phone 上面透過 JavaScript 寫 App,由於之前已經用 JavaScript 寫過 Windows 8 App,要轉到 Windows Phone 的入門門檻也相對小很多。

這次會去參加主要是公司想組隊去玩一玩,原本有另外三個同事要一起來,但有兩個人最近有點忙,只有另一個比較有空可以參加,也剛好他在公司主要負責網頁前端,透過 HTML/CSS 加上 jQuery 直接幫忙 UI 的部分,完全無負擔,而我主要寫後端。

在 Xcode 內加入 static library

如果要用別人包好的套件,有可能會收到以 static library 形式釋出的檔案,其中裡面通常包含:

  • libXXX.h
  • Debug-iphoneos/libXXX.a
  • Debug-iphonesimulator/libXXX.a
  • Release-iphoneos/libXXX.a
  • Release-iphonesimulator/libXXX.a

如果直接整包加入專案,通常會編譯失敗,並出現錯誤訊息:

Windows 8 App 開發:在使用者鎖定螢幕時不跳通知 (HTML5/JavaScript)

Windows 8 有快顯通知 (toast notification) 的設計,可以跳出通知來提醒使用者一些事情,但是 Windows 8 沒有像 iOS 或 Android 一樣具有通知中心 (notification center) 的設計,這會造成一個嚴重的問題是,如果使用者處於畫面鎖定時,快顯通知跳出來不久後就會消失,之後使用者完全無法知道 App 曾經跳了哪些通知。

由於不打算架設伺服器提供推播功能,App 已經實作每 15 分鐘就會執行一次背景工作,去比對有沒有新資料,如果有的話,就跳快顯通知。如果此時使用者的畫面是鎖定畫面,就可能會漏掉通知,因此打算在使用者鎖定時,就把通知關掉,等到下次使用者登入繼續使用時,再跳出快顯通知。

[Debian] insserv after Debian 6.0 and update-rc.d prior to 6.0

Reference: http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot

在 Debian 6.0 之前,使用 update-rc.d 指令來將 /etc/init.d/ 裡面的 script 放入開機時執行,但是在 Debian 6.0 之後,指令改成 insserv,而且系統會自動安排順序。

% insserv myscript

而在 Debian 6.0 之後執行 update-rc.d,會出現錯誤訊息:

% sudo update-rc.d myscript defaults

update-rc.d: using dependency based boot sequencing

info: mpt raid status change on Debian in VMware

前陣子在 VMware 上裝了一台 Debian,自此之後 root 的信箱每兩個小時就會收到一封信:

To: root
Subject: info: mpt raid status change on xxx
Date: Mon, 18 Mar 2013 00:19:17 +0800 (CST)
From: root

This is a RAID status update from mpt-statusd.  The mpt-status
program reports that one of the RAIDs changed state:

Report from /etc/init.d/mpt-statusd on

找了一下發現是「mpt-status」這個套件,如果是實體機器,這個套件應該頗重要,但是在虛擬機上應該會用其他方式來監測 RAID 的狀態,所以直接把這個套件移除掉就不會再收到mpt-status 發出來的 info 信了。