분류 전체보기 104

트러블슈팅) iOS. 무결성을 확인할 수 없기 떄문에 이 앱을 설치할 수 없습니다.

문제 iPhone 15에서 기존에 배포되어 있던 앱을 다운로드 시, "무결성을 확인할 수 없기 떄문에 이 앱을 설치할 수 없습니다."라는 문제가 나왔다. Apple 커뮤니티 - iPhone 15, iOS 17에서 무결성 해제 방법 알려주실 수 있을까요? 비슷한 문제를 가지고 계신분들이 있는 것 같다.. 해결과정 구글링을 해보니 앱 버전과, 빌드 버전를 업데이트 해보라는 글이 많아 수정해서 배포하려고 했다. 일단 재 배포하기 위해 ipa파일을 생성 한 후 dropbox에 업로드 했다.(dropbox로 배포하는 방식으로 하는 중이다.) 절차대로 manifast 수정하고 웹 코드도 수정했지만, 다운로드 반응이 없었다.(보통 dropbox 링크 문제인 경우이다.) 이전 공유 링크 url과 비교해보니 url중간에..

SwiftUI `.fullScreenCover` `enum` 활용해 화면 전환

화면 전환을 하는 버튼이 여러개가 있을 떄, 계속 예상치 못한 화면으로 전환되어 정리하는 겸 기록해보자.. 먼저 fullScreenCover에 대해 알아보자. 가능한 한 많은 화면을 표현하는 modal 보기라고 설명되어 있는데, 보여줄 컨텐츠가 연관되어 있는 것이 아닌 새로운 컨텐츠일떄 사용할떄 많이 사용하지 않을까 싶다. 사용법은 간단하다. struct ContentView: View { @State private var isButtonTap = false var body: some View { VStack { Button { isButtonTap.toggle() } label: { Text("화면 전환!") } } .fullScreenCover(isPresented: $isButtonTap) { Te..

iOS/SwiftUI 2023.11.13

SwiftUI TextField

SwiftUI에서 입력가능한 인터페이스 구현시 TextField를 많이 사용합니다. 구현 방법 struct ContentView: View { @State var text = "" var body: some View { VStack { TextField(text: $text) { Text("PlaceHolder") } .padding() } Text(text) .padding() } } TextField에 입력 시 @State로 선언된 text에 업데이트 됩니다. 스타일링 명확하게 입력란을 알려주기 위해 테두리 효과를 적용하겠습니다. struct ContentView: View { @State var text = "" var body: some View { VStack { TextField(text: $..

iOS/SwiftUI 2023.11.10

SwiftUI DisclosureGroup

앱 상에서 특정 화면을 표기하거나 숨기는 기능이 필요로 할 때 DisclosureGroup을 사용합니다. 공식문서에서는 "공개 제어 상태에 따라 다른 콘텐츠 보기를 표시하거나 숨기는 보기입니다." 라고 소개해주고 있습니다. isExpanded의 값에 따라 보여지고, 숨김 상태를 관리할 수 있습니다. 저 같은 경우는 DisclosureGroup View가 눌러졌을 때 바로 보여짐 상태로 전환하고 싶었는데, 아래쪽에 다른 생성자가 있었습니다. 위의 생성자를 사용하게 되면 별다른 Bool타입 관리 없이 Label을 클릭하게 되면 content가 보여짐 상태로 전환됩니다. 사이드 이펙트에 대한 액션이 아닌, 해당 View 클릭 시에만 보여짐 상태를 원한다면, 이 생성자를 사용하는게 개인적으로 좋지 않을까 생각합..

카테고리 없음 2023.11.08

SwiftUI ZStack 활용

SwiftUI의 ZStack을 이용해 현재 용량에 대한 정보를 표시하는 ProgressView를 구현해 보았다. 일단 완성된 View는 아래 그림이다. 지원하는 라이브러리나, 오픈소스가 있는 지 찾아보았지만, 찾을 수 없어 직접 만들어 보았다. 먼저 View 스택구조는 맨 밑의 배경을 담당하는 View 1개, 그리고 타입별 용량을 나타내는 View 한개씩 해서 총 6개의 View로 되어있다. 문제 만드는 과정에 문제점이 있었는데, ZStack으로 아무런 설정없이 구성하게 되면, View가 겹치기 떄문에, value 값을 어떻게 넣어야 되고, 또한 타입 별 value가 순서대로 보여지게 끔 되어야 했다.(순서가 보장되어야 한다. ex) 텍스트, 사진, 동영상 이러한 순서대로...) 정리하자면 2가지의 문제..

iOS/SwiftUI 2023.11.07

SwiftUI Core Data & Realm Preview crash 해결

CoreData 또는 Realm의 구조 변경 시 앱을 실행시키면 형식에 맞지 않아 crash 현상이 발생된다. 시뮬레이터인 경우 해당 앱을 삭제 후 다시 빌드를 하면 되지만, SwiftUI의 Preview인 경우 직접적으로 해당 앱을 삭제 하지 못한다. Xcode를 강제종료해서 재 빌드를 해보았지만 여전히 동일한 문제가 발생되었고, 구글링 중 스택오브플로우 자료를 참고해서 적용해보니 잘 작동되었다. 시도한 방법은 터미널을 열어서 xcrun simctl --set previews delete all 명령하는 것이다. 아래 사진처럼 Using Previews Device Set: ... 나오면 정상으로 초기화 된 것으로 보인다. 참고링크 https://stackoverflow.com/questions/667..

Realm 채팅 앱 개발 중 메세지 삭제 에러

에러 메세지 삭제 시 RLMException: Object has been deleted or invalidated 에러 메세지가 나오면서 앱이 꺼지는 현상 발생 원인 메세지로그의 변화를 감지하기 위해 Realm의 observe 사용하고 있었다. observe에 짧게 알아 보자면 조금더 자세한 내용은 문서 참조 https://www.mongodb.com/docs/realm/sdk/swift/react-to-changes/ 문서에서 컬렉션 변화에 감지하는 리스너를 등록이라고 설명되어 있다. -> 컬렉션의 데이터 변경이 되면 호출되는 메서드 인 것 같다. 다시 돌아와서 메세지 삭제 시 해당 컬렉션의 데이터를 Realm 호출해 삭제 시키고 있는데 다시 한번더 해당 컬렉션의 데이터를 참조? 값을 찾을려고 하니 ..

음성 녹음, 재생

음성 녹음을 위한 AVAudioPlayerDelegate 음성 재생을 위한 AVAudioRecorderDelegate class AudioRecorderManager: NSObject, ObservableObject, AVAudioPlayerDelegate, AVAudioRecorderDelegate { // 음성메모 녹음 var audioRecorder: AVAudioRecorder = AVAudioRecorder() @Published var isRecording = false // 음성메모 재생 var audioPlayer: AVAudioPlayer? @Published var isPlaying = false @Published var isPaused = false // 음성데이터 @Publishe..

iOS/iOS 2023.09.04