프로젝트/아이매드
-
[아이매드] - 메모리 최적화(2)프로젝트/아이매드 2024. 10. 30. 19:52
저번에 이어서 메모리를 최적화 해보겠다. 이번에 생긴 문제도 Kingfisher사용 미숙으로 발생한 문제다. 아이매드의 메인화면에서는 여러 옵션으로 작품을 추천해준다. 옵션은 총 8개 한 옵션당 20개씩 추천 작품이 존재하고, 메인화면에서는 모든 추천 작품의 포스터를 표시하니 실제로 앱에서 표시하는 이미지는 대략 200개 가까이 된다. 만약 KFImage를 KFImage(URL(string:image)) .resizable() .cancelOnDisappear(true) .cacheMemoryOnly(false)이렇게만 쓰게 된다면, 메인화면에서만 메모리를 1GB씩이나 사용하게 된다. 다른 대규모 앱들은 메모리 사용량이 어떻게 되는지 잘 모르겠지만... 그걸 모르는 내가 봐도 한 화면에 ..
-
[아이매드] - 메모리 최적화(1)프로젝트/아이매드 2024. 10. 30. 12:01
요즘 이미 만들어 놓은 프로젝트의 성능을 개선하는 작업을 하고 있다.기능만을 개발하던 프로젝트였기 때문에 테스트를 하면서 이런저런 문제들이 보이기 시작해 이것들을 해결하기로 했다. 일단 첫번째로 개선해야할 문제는 메모리 문제였다. 아이매드는 사용자에게 많은 작품의 정보를 제공하다보니 이미지를 다룰일이 많다. 그 이미지는 서버에서 이미지 경로의 end point를 제공받아 Kingfisher라는 라이브러리를 사용해 앱에 표시한다. 하지만 앱을 사용하다보니 일정 수준 이상 사용할 경우 앱이 자동으로 꺼진다. 10000% 버퍼 오버플로우임을 직감했다.확인해보니 작품 추천 같은 무수히 많은 이미지 리스트를 스크롤하면 메모리 사용률이 점점 증가하다가 일정 수준이 넘어서 앱이 다운되는 것이였다. 이미지라고 하면....
-
[아이매드] - SwiftUI로 StickyView 만들기프로젝트/아이매드 2024. 7. 28. 01:49
오늘은 StickyView를 만들어보겠다.여기서 말하는 StickyView는 스크롤 다운 시 이미지가 헤더에 고정되며 프레임의 크기를 동적으로 변경하는 것을 뜻한다. 프로젝트 중 작품 상세 화면에서 StickyView를 구현할 일이 생겨 직접 구현해 봤다.이렇게 말이다. (첨엔 좀 버벅거린다. 의도된 게 아니다..) 눈치 빠른 사람들은 알겠지만, 이것은 GeomtryReader를 사용해서 구현했다.GeometryReader를 사용하는 것은 아직도 미숙하지만 이번 컴포넌트는 쉽게 구현한 것 같다. 먼저 SwiftUI 프로젝트로 뷰를 생성해 주고 GeometryReader를 선언해 준다.struct StickyView: View { var body: some View { GeometryRe..
-
[아이매드]- 배포 후 두번째 리젝(Guideline 1.2 - Safety - User-Generated Content, Guideline 1.5 - Safety)프로젝트/아이매드 2024. 7. 24. 15:32
이번에 첫번째 리젝 이슈들을 해결하고 심사를 다시 제출했는데, 두번째 이슈가 도착했다.다시 한번 알아보자 Guideline 1.2 - Safety - User-Generated Content여전히 컨텐츠에 예방조치가 완료되지 않았다는 내용이다.사용자가 이용약관 동의를 해야하며, 불쾌한 콘텐트나 학대적인 사용자에 대한 관용이 없다는 내용이 확실하게 명시되야한다.사용자를 차단할 수 있는 메커니즘???? 다 추가했는데..? 뭐가 문젠지 고뇌하던 중 번뜩 생각이 들었다. 생각해보니 이용약관 같은 경우, 회원정보를 모두 수집하고 마지막에 계정 생성 때 띄웠었다.근데 동의를 받지도 않았는데, 정보를 수집한다는게 순서에 맞지 않는 것이다. 그래서 이용약관을 회원가입 후 바로 띄우도록 코드를 수정했다. 그 다음 보니..
-
[아이매드]- 배포 후 첫번째 리젝(Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage)프로젝트/아이매드 2024. 7. 24. 14:32
이번엔 저번 이슈에 이어서 두번째 리젝 원인에 대해서 포스팅해보겠다. 저번 포스팅에서 이용약관에 관한 내용을 건너뛴 이유는 이번 잇슈를 해결할 큰 열쇠였기 때문이였다. Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage 앱에의 핵심 기능과 직접적으로 관련이 없는 데이터는 수집하지 않아야한다는 내용이다. 이곳에서 말하는 필요하지 않는 데이터는 다음과 같았다. 성별연령아이매드는 작품을 추천할때 사용자의 성별 및 나이대에 맞춰서 작품을 추천해주는 매커니즘이다. 하지만 앱스토어에 심사를 받기 전에 충분할 설명이 필요할 것 같았다. https://quarang.tistory.com/83 [아이매드]- 배포 후 첫번째 리젝(Guideline 1.2 -..
-
[아이매드]- 배포 후 첫번째 리젝(Guideline 1.2 - Safety - User-Generated Content)프로젝트/아이매드 2024. 7. 24. 14:28
이번에 프로젝트를 첫 배포를 시키며 나온 잇슈를 관련해서 포스팅하겠다.지금까지 3개의 앱을 배포했지만 커뮤니티형 서비스를 처음 서비스해 보는 터라 놓친 부분이 있었는 듯하다. 이슈는 총 두 개하나씩 확인해 보자. 먼저 해당 잇슈다. Guideline 1.2 - Safety - User-Generated Content첫 번째 이슈는 사용자를 콘텐츠로부터 보호할 수단이 있어야 한다는 것이다. 그다음 내용으로는불쾌감을 주거나 학대적인 사용자 및 콘텐츠에 대한 이용약관 동의를 요구문제가 되는 게시글이나 사용자를 차단하거나 표시하지 않는 메커니즘 필요개발진에서 문제가 되는 게시글을 24시간 이내에 해당 컨텐츠와 사용자를 제재하는 운영정책아이매드는 영상 컨텐츠를 주제로 하는 애플리케이션이다. 하지만 우리는 신고 ..
-
[아이매드] - SwiftUI로 사진 선택 후 이미지 규격 변경하기프로젝트/아이매드 2024. 7. 17. 16:10
요즘 팀 프로젝트 배포에 많은 신경을 쏟고 있다.최대한 많은 기술을 도전해 보고 실제 앱에 적용 시키려고 노력하고 있는데, 오늘은 여러 앱에서 프로필 사진을 등록할 때 나오는 사진 선택 후 규격에 맞게 자르고 서버에 전송하는 것까지 포스팅 해보려고 한다. 우리 프로젝트는 프로필을 선택하는 기능이 있는데, 타사 서비스 처럼 프로필을 선택하는 로직을 직접 구현해보고 싶었다. https://www.youtube.com/watch?v=1Fz86eQjxus이 영상을 참고해 제작했다. 코드 내용은 영상과 거의 동일 하지만 우리 서비스에 맞게 조금씩 코드를 수정하고, 코드를 이해하는데 시간이 많이 소요됐다.코드를 하나씩 짚어보면서 원리를 파악하자 아이매드 프로젝트에서는 프로필 선택 모드가 총 두가지가 있다. ..
-
[아이매드] - SwiftUI 더보기 버튼프로젝트/아이매드 2023. 4. 18. 17:14
요즘 프로젝트 제작에 많이 힘쓰고 있다. 프로젝트를 하던 중 특정 텍스트가 길어질 경우 앞 일부분만 사용자에게 보여주고 더 보고 싶을때 펼쳐서 볼 수 있는 더보기 기능이 필요했다. 텍스트 길이에 따른 높이를 계산하여 height를 설정해야 하고, 특정 줄 수 이하일 경우 더보기 버튼을 보여지지 않게 해야한다. 과정은 다음과 같다. 1. 전체 텍스트의 높이2. 지정한 폰트에 따른 한줄의 텍스트 높이 * 초기 상태로 설정할 줄 수3. 2와 3을 비교하여 더보기 버튼 추가 유무 설정 일단 하나씩 살펴보자private func getHeightForText(_ text: String) -> CGFloat { let constraintRect = CGSize(width: UIScreen.main..