[RELEASE] DynamicAlert : Display UIAlertController on the Dynamic Island!
**It’s super unstable.**
Tested on:
- iPadOS 17.5.1 with iPad Pro 10.5 (palera1n)
- iOS 17.5.1 with iPhone 15 Pro max Simulator (dyld injection)
FixSwiftUIMemoryLeak (Affected: iOS 17.0..<17.2)
This project solves the SwiftUI Memory Leak bug without using the UIKit Presentation method. However, it's a very dangerous approach and not perfect.
[Tweak Release] SplittableProKeyboard - Enable Splittable Pro Keyboard on iPadOS
- Enable Pro Keyboard on non-Pro iPads.
If you are a developer, just call -[UIKeyboardPreferencesController setEnableProKeyboard:] in any app. This will apply to all
iOS 18.0에 추가된 MAMusicHapticsManager에 대해
- 음악의 비트에 맞게 Haptic을 울리게 하는 API
- iOS 18.1 beta 4 부터 기본 음악 앱이 지원
- 앱에서 Now Playing을 지원해야 한다.
- 음원의 ISRC 코드 (예: USUG12306672)를 통해 비트 데이터를 받아오는 방식. 따라서
@Dimillian
This change seems to reduce the app size. Previously, the App Icon was included in both the App Bundle and Assets, but with this change, it has been removed from the Assets. If your app needs the App Icon, you can retrieve it using the following code:
UIImage(contentsOfFile:
iOS 18 부터 한국어도 Grammatical Agreement를 지원한다.
예를 들어
나는 ^[%@이](inflect: true) 먹고 싶다.
라는 문자열에 '사과'가 들어갈 경우 '나는 사과가 먹고 싶다.'로 되며
'파인애플'이 들어갈 경우 '나는 파인애플이 먹고 싶다.'로 된다.
I guess iPad users may be able to enable external display for Stage Manager by adding MobileGestalt key DeviceSupportsEnhancedMultitasking (qeaj75wk3HF4DwQ8qbIi7g). Source:
View에서 Screen Capture를 방지하는 방법들이 여러 개 있는데
아래 글처럼 disableUpdateMask의 값이 뭔지가 핵심으로 보인다. 아마 저자는 _UITextLayoutCanvasView의 layer 값을 보고 알아낸 것 같다.
iOS에서 CALayer의 랜더링 원리를 정확히는
UIMutableApplicationSceneClientSettings 및 UIMutableApplicationSceneSettings로 SpringBoard와 데이터 통신해서 Dynamic Island Activity에 Alert 띄우기 성공했다.
이제 UIAlertController를 후킹해서 모든 앱에 적용되게 해야 한다.
iOS에 AVCaptureSession이 Running일 경우 Volume Button Event를 감지하는 API가 추가되었네. 따라서 Volume Button으로 사진을 찍는 앱을 만들 수 있게 되었다.
[iOS 17.2+] AVCaptureEventInteraction
[iOS 18.0+]
MyPoster
This project introduces how to create custom posters in PosterBoard, which was added in iOS 16. However, this project only introduces a part of the method, and I have not succeeded yet.
UIViewPropertyAnimator의 Tracking이라는 Private API 사용 예제
UIPercentDrivenInteractiveTransition의 내부 구조를 보고 Tracking의 존재를 알게 되었다.
Tracking이 시작되면 _UIViewPropertyAnimatorTrackingGroup (id<UIViewAnimating>)이 Global하게 생성되며,
UITraitAlwaysOnUpdateFidelity로 Always On 옵저빙 및 View Update 예제
Apple Watch가 Always On에 진입하면 Display는 매우 낮은 주사율로 작동한다. 개발자는 원하는 시점에 View를 Update 할 수 없으며, System에서 전달하는 시점에만 가능하다.
이 시점은
for clarity: this does use the thid_should_crash=0 boot-arg, but:
- this is common knowledge on all (up-to-date/reputable) guides
- this is needed on 17.2+ anyways (else most App Store apps will crash on launch)
-[UIApplication _deactivateReachability]
Reachability가 활성화된 상황에서 Reachability를 끌 수 있다. UINavigationController가 Push/Pop 등을 할 때 쓴다.
-[UIApplication _setReachabilitySupported:]
Reachability를 막을 수 있다.
---
사진처럼 Scene을 아래로 내리는 것을
나도 예전에 이거 하려다가 카카오페이의 보안 취약점은 대상이 아니길래 포기했던 적이 있는데, 이 트윗 보고 생각나서 카카오페이를 다시 써보니 지금은 수정되어서 이 참에 공개해봄
탈옥된 기기 및 Mac Catalyst에서 옛날에 보안키패드 입력 내용을 탈취하는 시연 영상이고 지금은 작동하지 않음
[SE-0377] borrowing and consuming parameter ownership modifiers
consume, consuming (__owned), borrowing (__shared)에 대해 공부해봤다.
consume�� 더 이상 값을 사용하지 않을 때 쓰인다. 첫 번째 사진에서, consume fooObject를 사용하면 swift_release가
@iTechExpert21
@disfordottie
1. Disable SIP
2. Run iOS 18 Simulator and run Photos (MobileSlideShow) app
3. Open terminal and type 'lldb -n MobileSlideShow'
4. Type 'expr -l objc -O -- [[PXLemonadeSettings sharedInstance] setInternal_wantsLemonadeUI:0x0]'
5. Type 'exit'
6.
UIContextMenuConfiguration에서 Multi Item을 보여주는 기능 구현 예제 (iOS 16.0+)
-[UIContextMenuConfiguration setSecondaryItemIdentifiers:]를 정의하고, -contextMenuInteraction:interaction:configuration:highlightPreviewForItemWithIdentifier:를 구현하면 된다
(lldb) po [[SBSABasePreferencesProvider settings] setResizeGestureYRubberbandingStretch:10.f]
(lldb) po [[SBSABasePreferencesProvider settings] setRecombineGestureXRubberbandingStretch:10.f]
1. withObservationTracking(_:onChange:)은 변화가 생길 때 Tracking을 Cancel하기 때문에 Observation이 일시적인 것이다.
2. 가장 좋은 것은
@_spi
(SwiftUI)를 써서 Cancel을 직접 제어하는 것이다. Swift Toolchain을 쓴다면 _spi symbol들을 쓸 수 있으며, Xcode에
for comparison, this is example from proposal. that in fact call renderCars() inside onChange closure. Because withObservationTracking is not continous observation and need to be re-scheduled after each change
thank you for attending my TEDx
AVCapturePhoto를 Metadata와 함께 Photo Library에 저장하기
- UIImage 및 CIImage는 Metadata (EXIF 등)을 가지지 않는다.
- CGImage는 Metadata를 가진다.
- `+[PHAssetChangeRequest creationRequestForAssetFromImage:]`로 Photo Library에 사진을 저장할 때 Metadata가 저장되지 않는다. 첫번째
SpringBoard쪽 보면 Blur Effect들에 UIVisualEffectView 대신에 MTMaterialView를 쓰던데 이게 뭔지 궁금하네. 대충보니 MTMaterialLayer를 layerClass로 사용하고, CABackdropLayer를 상속하고 있다.
UIVisualEffectView 보다 다양한 Blur Effect를 지원하는게 특징같은데
WidgetKit으로 Dynamic Island Widget을 띄우려고 할 때, 내부적으로 PropertyListDecoder를 이용하여 Activity의 정보를 Archive 한다.
그 데이터는 SpringBoard가 수신하며, ACActivityDescriptor에서 init 할 때 쓰인다.
이건 아닌 것 같은데
아마 Main Thread를 원활하게 구동하기 위한 Core 1개를 할당하기 위해 -1을 해준 것 같은데 이 보장은 없음. 이 코드와 무관한 다른 Thread가 그 Core를 사용한다면 Main Thread는 바로 안 돌 수도 있기에 이렇게 단순하게 보장할 수 없다고 생각한다.
그냥 priority를
Advanced Swift tip:
When you need to parallelise massive tasks, optimise resources while avoiding blocking the main thread.
Use ProcessInfo to use the number of CPU cores minus one.
@disfordottie
I have only tested this with the LLDB command in the simulator. If you want to try it on your device, you may have to use Cowabunga Lite and modify the .mobileslideshow.plist. I haven't tested it myself, so you will need to figure out how to do this.
Objective-C Class의 초기 데이터 값들은 항상 0이 보장될지 궁금해서 objc4 소스코드를 봤더니 Memory Allocation을 위해 calloc을 쓰고 있다. calloc은 모든 bytes의 값을 0으로 초기화한다.
반면에 Swift는 malloc, posix_memalign을 쓰기
UICollectionView의 Orthogonal Scroll View (Private API) 사용 예제
Estimated Cell 및 Bound Changes 대응도 어떻게 해야 하는지 담겨 있다.
UICollectionViewCompositionalLayout의 내부 구조를 보고 따라했다.
Xcode 16 부터 CoreGraphics.swiftmodule이 생겼다.
이 파일을 보면 CGPoint, CGSize, CGRect이 Hashable을 기본적으로 지원하기 시작했다.
새로 추가된 기능들은 모두
@_transparent
및
@_alwaysEmitIntoClient
로 정의되어 있기 때문에 하위 OS 버전에서도 새로운 기능들을 사용할 수 있다.