hubo.dev의 거울
Telegram 은보다 정기적 인 일정으로 클라이언트 소스 코드를 공개하기 위해 [ iOS 및 Android 용 재현 가능한 빌드 ] 프로그램을 시작했습니다 . 훌륭한 움직임이지만 최소한의 효과로 iOS 프로젝트를 빌드하고 실행하는 방법이 여전히 혼란 스러울 수 있습니다. 공식 가이드 빌드를 확인하기 위해 존재하는 패러랠 가상 머신 내부의 맥 OS 카탈리나, 엑스 코드 11.x의, 및 기타 도구의 설치를 요구하는 재현이다.
이 가이드에는 코드 작업을 원하는 개발자에게 문제가 있습니다.
-macOS 및 Xcode의 다른 복제본을 실행하려면 강력한 시스템이 필요합니다.
-Xcode 11.x는 구식이며 최신 Xcode 12.x는 코드 완성시 15 배 더 빠릅니다 .
-Xcode IDE에서 프로젝트를 여는 방법을 보여주지 않고 자동화 스크립트 파일을 실행하여 IPA 파일을 생성합니다.
-Xcode 시뮬레이터에서 빌드하고 실행하는 방법은 다루지 않습니다.
이 튜토리얼은 문제를 해결하는 방법을 보여줍니다. 필요한 도구를 설치하고 프로젝트 코드의 일부를 수정하여 작동하도록합니다. 세부 사항을 읽고 싶지 않은 경우 마지막 섹션으로 빨리 이동할 수 있습니다.
내 개발 컴퓨터는 Xcode 12.2 (12B45b)와 함께 macOS Catalina 10.15.7을 실행합니다. Telegram-iOS는 buck 을 사용 하여 타사 라이브러리를 빌드하고 Xcode 작업 공간 파일을 생성합니다. Homebrew를 통해 buck 및 종속성 JDK 8을 설치할 수 있습니다.
brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8
brew tap facebook/fb
brew install buck
$ java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.272-b10, mixed mode)
$ buck --version
buck version 2020.10.21.01
git clone --recursive https://github.com/TelegramMessenger/telegram-ios.git
cd telegram-ios
Telegram-iOS를 사용하면 개발자가 자신의 클라이언트 변형을 사용자 정의하고 빌드 할 수 있으므로 빌드 시스템은 설정을 제공하기 위해 많은 환경 변수를 사용합니다. 재현 가능한 빌드 가이드의 설정을 시뮬레이터에서만 실행하고 싶으므로 재사용 할 수 있습니다.
build-system / verify.sh 의 원래 설정에 사소한 조정을 추가합니다 .
BUCK
변수를 추가 하십시오. 는 makefile
벅 명령을 찾을 수에 달려.BUILD_NUMBER
변수를 추가 하십시오.IS_INTERNAL_BUILD
에 true
와 IS_APPSTORE_BUILD
에 false
.Config / utils.bzl 에 추가하여 모든 모듈에 대해 데드 코드 제거를 활성화해야합니다 .
그렇지 않으면 Xcode로 프로젝트를 빌드하는 동안 다음 오류가 발생할 수 있습니다.
일부 타사 라이브러리의 빌드 설정 x86_64
에는 Apple M1 컴퓨터가없는 한 시뮬레이터에 필요한 대상 이 없습니다 . 우리 스스로 추가해야합니다.
mozjpeg
조정이 필요한 그들 중 하나입니다. third-party / mozjpeg / BUCK 내부 에서 arm64
및의 두 대상을 선언합니다 armv7
. 우리는 변경할 수 있습니다 armv7
에 x86_64
우리가 필요로하지 않는 armv7
시뮬레이터와 대부분의 장치에.
Telegram-iOS webrtc-ios
는 올해 수입 된 거대한 모듈 인를 기반으로 화상 통화를 구축합니다 . 작업 공간 파일을 생성하기 전에 벅차게 프레임 워크에 빌드해야합니다. 불행히도 공식 리포지토리의 코드는 Xcode 12.x로 컴파일되지 않으며 x86_64
대상을 지원하지 않습니다 .
첫 번째 변경 사항은 빌드 시스템 의 일부인 Python 스크립트 find_sdk.py 입니다 webrtc-ios
. Xcode.app에서 SDK 경로를 찾는 데 도움이됩니다. ^MacOSX(10\.\d+)\.sdk$
SDK 경로 이름이 .x로 변경되었으므로 원래 정규식 은 Xcode 12.x에서 작동하지 않습니다 Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk
. 식을로 변경해야 합니다. ^MacOSX(1[01]\.\d+)\.sdk$
이는 MacOSX10
및 MacOSX11
SDK 이름 과 모두 일치 합니다.
다른 수정 사항은 x86_64
다음과 같이 대상 을 추가하는 것입니다 .
이제 아래 명령을 실행하여 라이브러리를 빌드하고 작업 공간 파일을 생성 할 준비가되었습니다.
make project
Xcode가 실행되는 것을 보는 것은 흥미롭지 만 마지막으로 필요한 변경 사항이 하나 있습니다. 그렇지 않으면 시뮬레이터에서 실행할 빌드 프로세스가 많은 링크 단계 오류와 함께 실패합니다.
Undefined symbols for architecture x86_64:
"static UIKit.UIPointerShape.defaultCornerRadius.getter : CoreGraphics.CGFloat", referenced from:
Display.(PointerInteractionImpl in _B39DD7E7F85F24DF4F7212BCFE28692F).pointerInteraction(_: __C.UIPointerInteraction, styleFor: __C.UIPointerRegion) -> __C.UIPointerStyle? in PointerInteraction.o
"enum case for UIKit.UIPointerShape.roundedRect(UIKit.UIPointerShape.Type) -> (__C.CGRect, CoreGraphics.CGFloat) -> UIKit.UIPointerShape", referenced from:
Display.(PointerInteractionImpl in _B39DD7E7F85F24DF4F7212BCFE28692F).pointerInteraction(_: __C.UIPointerInteraction, styleFor: __C.UIPointerRegion) -> __C.UIPointerStyle? in PointerInteraction.o
"enum case for UIKit.UIPointerEffect.highlight(UIKit.UIPointerEffect.Type) -> (__C.UITargetedPreview) -> UIKit.UIPointerEffect", referenced from:
Display.(PointerInteractionImpl in _B39DD7E7F85F24DF4F7212BCFE28692F).pointerInteraction(_: __C.UIPointerInteraction, styleFor: __C.UIPointerRegion) -> __C.UIPointerStyle? in PointerInteraction.o
이제 시뮬레이터에서 Telegram-iOS를 빌드, 실행 및 디버그 할 수 있습니다.
복잡한 빌드 시스템으로 싸우는 재미를 즐길 시간이없고 최종 단계로 빨리 나아가고 싶다면 Telegram-iOS의 분기 된 저장소에 패치 파일로 변경 사항을 저장했습니다 . 공식 저장소를 확인하고 명령을 실행하여 프로세스를 단순화하는 패치를 다운로드하고 사용할 수 있습니다.
앱에서 개발자는 종종 앱 내의 여러 지점에서 특정 정보를 요구합니다. 이 정보를 요청하려면 레이 오버를 생성하고 애플리케이션 어디에서나이를 트리거해야합니다.
Vrbo ™ ️ (Expedia Group ™의 일부) iOS 앱에서 최근 일부 기존 UIKit보기를 SwiftUI로 변환했으며 이미지 크기를 조정할 때 문제가 발생했습니다. 문제는 이미지를 특정 크기로 크기를 조정하고 왜곡없이 종횡비를 유지해야 할 때 발생합니다.
프로토콜은 Swift에서 매우 간단하지만 기본적인 개념입니다. 프로토콜은 코드 계약과 같습니다.
M1 칩을 실행하는 Mac이있는 경우 Mac App Store에 나열된 iOS / iPadOS 앱만 실행할 수 있습니다. 하지만 Mac App Store에 나열되지 않은 iOS / iPadOS 앱은 어떻습니까? 공식적으로는 할 수 없습니다.
작성자 : Francis Mariano, iOS 엔지니어 Headspace의 대담한 사명 선언문 인 세상의 건강과 행복을 개선합니다. 우리가 그곳에 사는 사람들의 다양한 경험을 인식하게 만드는 것.
이번에는 SwiftUI를 사용하여 원 안에 텍스트 레이블을 표시하는 몇 가지 방법을 살펴 보겠습니다. ZStack보기를 사용하여 세 가지 다른 방법을 자세히 살펴 보겠습니다.