Я создал свой собственный iOS фреймворк, думая, что он также скрывает свою частную реализацию для других разработчиков. После этого я добавил его в клиентское приложение и подумал, что все в порядке - я просто написал какую-то функцию, попытался Jump to Definition
(^ + ⌘) в XCode, и это бросило меня в интерфейс.
Но потом я пошел дальше - я добавил точку останова на вызов функции и в режиме отладки попытался step into
- в тот момент я прыгнул точно в функцию и увидел всю реализацию. После этого я попытался воспроизвести это с другими фреймворками, такими как Alamofire
, и заметил то же самое поведение.
Также я попытался создать stati c library , с в этом примере . Я добавил некоторые частные функции, просто для эксперимента. Но поведение было таким же - я могу войти в функцию и увидеть все реализации.
Для эксперимента вы можете сделать либо framework , либо stati c library . Для ясности я взял код из этой статьи . После этого я просто импортировал его и написал функцию:
private func testLibOrFramework() {
let service = AuthenticationService()
let token = service.login("name", "pass")
print(token)
}
Эксперимент 1: Я пытался Jump to Definition
. Я увидел то, что ожидал - интерфейс:
import Foundation
import SwiftOnoneSupport
public class AuthenticationService {
public init()
public func login(_ username: String, _ password: String) -> String
}
Эксперимент 2: Я добавил точку останова только при вызове функции lib / framework, запустил ее на симуляторе. Когда я добрался до этой строки кода, я нажал step into
. Результат - я вижу все реализации:
public class AuthenticationService {
public init() {
}
public func login(_ username: String, _ password: String) -> String {
let somePrivateLet = getLoginUUID()
return somePrivateLet
}
private func getLoginUUID() -> String {
return UUID().uuidString
}
}
Вопрос: есть ли способ скрыть частную реализацию для этого случая?
Если да: действительно ли это безопасно, или могут ли другие разработчики по-прежнему видеть код, если они хотят?