iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ?

工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ? 工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯. 假設你的專案叫”B”,打包的framework取名為BPack,那麽在Podfile的部分要加入framework自己的套件引用,原本的專案裝什麼pod,framework如果有用到該套件也要跟著裝,以SnapKit為例,作法如下: target ‘B’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B end target ‘BPack’ do Comment the next line if you don’t want to use dynamic frameworks use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’ Pods for B Pods for BPack end另外,在Build Setting的部分好像也要做一下設定: 如果你包的是動態庫,那麽在framework target的Build Settings: Linking -> Mach-O Type應該要選擇:Dynamic Libray Mach-O這部分不太確定有沒有影響,不過我這樣選是可以Run App Successful. 有錯麻煩請指正,感謝! ...

September 22, 2023 · 1 min · Peter

面試常見題: OSI 7層

#個人心法# 面試常見題: OSI 7層 #個人心法# 記首位字母 縮寫 P.D.N.T. SPA 口訣: 有三個人(‘P’hy. ‘D’a. ‘N’et.) 去(‘T.’: 想成To) ‘S.’ ‘P.’ ‘A.’ 等於: Physical Data Network Transport Session Presentation Application 定義:參考https://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B Physical layer/ 實體層:為資料端裝置提供傳送資料通路。 數據機 光纖 Data link layer/ 資料連結層:在兩個網路實體之間提供資料鏈路連接的建立、維持和釋放管理。 Wifi 乙太網路 PPPoE Network layer/網路層:提供定址和路由的功能。 -IP(IPv4, IPv6) Transport layer/傳輸層:傳輸層服務通過傳輸層協定的編程介面傳遞給應用行程。 Transmission Control Protocol,縮寫:TCP User Datagram Protocol,縮寫:UDP Session layer/會議層:主要為兩個會議層實體進行對談(Session),而進行的對話連接的管理服務。 https://zh.wikipedia.org/wiki/%E4%BC%9A%E8%AF%9D%E5%B1%82 Presentation layer/表現層:為不同終端的上層使用者提供資料和資訊正確的語法表示變換方法。 ASCII格式 UTF-8格式 Application layer/應用層:應用層直接和應用程式介面結合,並提供常見的網路應用服務。 BitTorrent DNS POP3 SMTP SSH Telnet

August 20, 2023 · 1 min · Peter

MacOS[祕技] Dock的隱藏與顯示

如果Dock有開啟自動隱藏的話,可以把動畫效果關掉 MacOS[祕技] Dock的隱藏與顯示 如果Dock有開啟自動隱藏的話,可以把動畫效果關掉 桌面與Dock選項裡面可以找到在終端機下指令: $defaults write com.apple.dock autohide-time-modifier -int 0這句命令調整的是當你把鼠標移動到螢幕邊緣時,Dock 開始出現之前的延遲時間。設為 “0” 意味著 Dock 將在鼠標接觸螢幕邊緣的瞬間立刻開始出現,無需等待。 $defaults write com.apple.dock "autohide-delay" -float "0"這句它是用來調整 macOS Dock 的自動隱藏延遲時間,設定為 0 意味著當你將鼠標移到螢幕邊緣時,Dock 將立即(沒有延遲)出現。 在執行上面的命令後,通常還需要重啟 Dock 以使更改生效,可以使用以下命令或是重新開機也可以: $killall Dock或是: $defaults write com.apple.dock autohide-time-modifier -int 0;killall Dock具體解釋如下: defaults: 這是一個命令行工具,用於讀取和修改 macOS 的應用程式和系統設置。 write: 表示要寫入或修改一個設置。 com.apple.dock: 這是 Dock 應用程式的 domain name。 autohide-delay: 控制的是啟動動畫之前的等待時間。 autohide-time-modifier 控制的是動畫的執行速度。 -float: 表示接下來的值是一個浮點數。 "0": 這是你想設定的新值。設定為 0 意味著當你將鼠標移到螢幕邊緣時,Dock 將立即(沒有延遲)出現。 總結: "autohide-delay" 控制的是啟動動畫之前的等待時間。 autohide-time-modifier 控制的是動畫的執行速度。 如果你將兩者都設為 0,那麼當你移動鼠標到螢幕邊緣時,Dock 將瞬間顯示,不會有任何延遲或動畫效果。 ...

August 4, 2023 · 1 min · Peter

Xcode Hotkey

在 iOS 開發過程中,熟練使用 Xcode 快捷鍵是提升效率的關鍵。與其不斷地在滑鼠與鍵盤間切換,不如讓手指留在鍵盤上,像彈鋼琴一樣流暢地寫程式。 以下是我整理的 Xcode 必備快捷鍵速查表: 🚀 導航與跳轉 (Navigation) 最常用的功能,讓你快速在檔案與編輯器之間穿梭。 功能 快捷鍵 說明 快速開啟檔案 Cmd + Shift + O 最強大功能! 輸入檔名快速跳轉 (Open Quickly) 定位檔案位置 Cmd + Shift + J 在左側 Project Navigator 中選中目前編輯的檔案 跳轉到編輯器 Cmd + J 聚焦到編輯器區域,並可選擇開啟位置 顯示呼叫階層 Cmd + Ctrl + Shift + H Show Call Hierarchy,查看誰呼叫了這個方法 全域搜尋 Cmd + Shift + F Find in Workspace,搜尋整個專案 🖥 視窗與介面 (Interface) 快速開關不需要的面板,爭取最大的程式碼閱讀空間。 功能 快捷鍵 說明 開/關 導航面板 Cmd + 0 左側 Navigator (Project, Search, Git…) 開/關 檢查器 Cmd + Option + 0 右側 Inspector (Attributes, Identity…) 開/關 除錯區 Cmd + Shift + Y 下方 Debug Area 開新分頁 Cmd + T 開啟新的 Tab 開新視窗 Cmd + Option + T 開啟全新的 Xcode 視窗 📝 編輯與除錯 (Editing & Debugging) 寫程式時的得力助手。 ...

July 26, 2023 · 1 min · Peter

RxSwift -bindViewModel

第69行cell.configure一直進不去 RxSwift -bindViewModel 第69行cell.configure一直進不去 原因如下: required init?(coder aDecoder: NSCoder) 是 UIKit 控制器初始化的一部分,尤其是從 Storyboards 或 Xibs 中加載時。如果你正在嘗試從 Storyboard 或 Xib 中加載你的 ZooViewController,那麼就需要實現這個初始化方法。在你的程式碼中, required init?(coder aDecoder: NSCoder) { fatalError(“init(coder:) has not been implemented”) }你用 fatalError("init(coder:) has not been implemented") 拋出了一個執行時期的錯誤。 如果你確實不需要從 Storyboard 或 Xib 加載,你可以避免使用 ZooViewController 作為 Storyboard 或 Xib 的類別,或者避免透過 Storyboard 或 Xib 實例化 ZooViewController。在這種情況下,你的 init(coder:) 方法將永遠不會被呼叫,因此你的 fatalError 也不會觸發。 如果你需要從 Storyboard 或 Xib 加載 ZooViewController,那麼你需要提供 init(coder:) 方法的實現。這可能意味著你需要提供一個預設的 ZooViewModel,或者提供一種方式來設定 ZooViewModel,如下所示: required init?(coder aDecoder: NSCoder) { self.viewModel = ZooViewModel() super.init(coder: aDecoder) }最後從Main.storyboard的viewController冠上我要的ZooViewController, 問題就解決了.

July 21, 2023 · 1 min · Peter

Flutter 狀態監聽問題

如何解決 var appState = context.watch(); Flutter 狀態監聽問題 如何解決 var appState = context.watch(); 這個錯誤訊息表示您嘗試在不同的路由中讀取 provider。 Provider 是有範圍的。如果您在一個路由中插入了一個 provider,那麼其他路由將無法訪問該 provider。 要解決此問題,您需要確保在讀取 provider 的 widget 和提供 provider 的 widget 在同一個路由中。如果您需要在不同的路由中訪問 provider,則需要將 provider 提升到共享範圍,例如將 provider 提供給整個應用程式。 main.dart改這樣後就沒有問題了。 因為有用到MyFavState, 所以要 import ‘package:top_100_movies/views/widgets/movie_card.dart’; 路徑要完整,我少加了/widgets

July 13, 2023 · 1 min · Peter