- Total
꿈꾸는리버리
SwiftUI Widget 딱대(짐).. : 딥링크가 안되는 뎁숑 ? 본문
☁️ Widget 시리즈
기본 시리즈
SwiftUI Widget 딱대.. (1/3) 위젯 기본 개념 + 구현
SwiftUI Widget 딱대.. (2/3) : 앱 내의 데이터를 widget에 띄우기
SwiftUI Widget 딱대.. (3/3) : 위젯을 눌렀을 때 다른 화면으로 뜨게 하기
에러 시리즈
SwiftUI Widget 딱대(짐).. : 위젯 memory 제한
SwiftUI Widget 딱대(짐).. : localization 적용
SwiftUI Widget 딱대(짐).. : 위젯에 폰트가 안 먹혀요...
SwiftUI Widget 딱대(짐).. : 딥링크가 안되는 뎁숑 ?
이번 포스팅 요약
1) link 안에는 띄어쓰기, 한글 등이 들어가면 안된다.
2) foreach 문을 사용한다면 widgetURL 말고 Link를 사용하자.
🔧 문제 상황
ㅎ... 오늘은 2024년 7월 23일 화요일... Widget 이야기가... 다시 왔습니다
딥링크가 안되더라구요?
위젯에서 카드를 누르면 바로 해당 일기 형식으로 글을 적을 수 있는 기능이 있었는데... 없어졌어요(?)
작동을 더이상 안 하더라구요?
💬 고민 Point + 🌟 문제 해결
1️⃣ URL,,, 너어어? 제대로 되어 있는지 확인 좀 하자
일단 제일 합리적인 의심이었던 Link URL이 제대로 되어 있는지를 확인을 해야겠다는 생각을 했다.
구글링을 해보니까 한글이나 띄어쓰기가 있으면 오류가 뜰 수 있다는 글 발견!! 그래서 혹시나 해서 link를 프린트했더니...
struct widgetEntryView : View {
var entry: Provider.Entry
var body: some View {
Text(entry.date, style: .time)
.widgetURL(getPercentEcododedString(urlString: "urlString 칭긔"))!) // 이 부분
}
// url에 띄어쓰기, 한글 등 오류가 날 수 있는 애들 없애는 함수
private func getPercentEcododedString(urlString: String) -> String {
return urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
}
}
struct ContentView: View {
@State var url: String
var body: some View {
Vstack {
Text("url 이놈 : \(url)")
}
// 이 부분
.onOpenURL(perform: { (url)
self.url= url.absoluteString.removingPercentEncoding ?? "" // string으로 만들어주는
})
}
}
오류 없이 잘 나오는 뎁숑?
2️⃣ 근데 왜 계속 Letter만 보내지는 거지?
여기서 어떤 카드를 누르든 letter만 보내졌다.
아래와 같은 코드였는데, ForEach로 Image를 반복하더라도, 마지막 요소만 linking이 되는 것 같았다.
( 왜냐면 파란색 영역을 누르면 다른 link가 떴고,
카드 배열이 바뀌면 list의 제일 마지막 요소만 링킹이 됐거든요 )
ForEach(recordList, id: \.self) { record in
Image(record.imageName+"_widget")
.widgetURL(URL(string: WidgetManager.getPercentEcododedString(string: record.imageName)))
}
그래서 구글링을 해보니까 나처럼 ForEach 문 안에서 link를 달면 각각의 요소로 인식이 안된다는 Apple Forums를 확인했다.
그리고 답변에서 누군가가 친절히 알려주신..
찾아보니까 .widgetURL의 경우에는 "위젯은 보기 계층에서 하나의 'widgetURL' 수식어를 지원하기 때문에 여러 뷰에 'widgeURL' 수식자가 있는 경우 동작은 구현되지 않는다"고 나와 있었다..
그러면서 알려주신 방법대로 WidgetEntryView 코드를 수정하니까 잘 작동!!
ForEach(recordList, id: \.self) { record in
Link(destination: URL(string: WidgetManager.getPercentEcododedString(string: record.imageName))!) {
Image(record.imageName+"_widget")
}
}
}
낄낄 해치웠다.
'오뚝이 개발자 > SwiftUI' 카테고리의 다른 글
info.plist localization string (0) | 2024.08.15 |
---|---|
[SwiftUI] 내 앱 설정화면으로 이동 (0) | 2024.07.25 |
[SwiftUI] Notification 구현하기 - x시간 후, 특정일자에, 특정 지역에서 (1) | 2024.05.01 |
[SwiftUI] LineHeight, LineSpace (0) | 2024.04.23 |
[SwiftUI] GeometryReader 뽀개기 (3) | 2024.04.21 |