제품 업데이트.
독립기념일: 여행 성과 및 Mapsake 친구
미국에서 독립기념일을 축하하는 모든 분들께, 독립기념일 축하합니다. 이번 릴리스에서는 개인 지도에 설명 가능한 성과와 친구 간의 공유 기능을 추가하여 더욱 즐겁게 사용할 수 있습니다.
독립기념일 축하
미국에서 독립기념일을 축하하는 모든 분들께, 독립기념일 축하합니다!
이 업데이트는 개인 여행 지도를 더욱 생생하게 만드는 두 가지 방법을 다룹니다. 업적은 사용자가 자신의 기록에서 새로운 패턴을 발견하도록 돕고, Mapsake Friends는 실제로 알고 있는 사람들과 자신의 기록을 비교할 수 있도록 합니다.
이러한 기능 중 어느 것도 핵심 규칙을 변경하지 않습니다. Mapsake는 기본적으로 개인용 지도입니다. 공개 팔로워 수, 글로벌 리더보드 또는 다른 사람에게 보여주기 위해 설계된 피드는 없습니다.
160과 관련된 이유로 지도를 다시 살펴보세요.
Mapsake에는 약 160개의 업적이 포함되어 있습니다. 여기에는 첫 번째 등록 장소, 5개 국가, 모든 대륙, 도시 및 공항 목록과 같은 친숙한 마일스톤이 포함됩니다. 또한 지리적 그룹, 문화, 자연, 과학, 항공 및 여행 기록에 숨겨진 덜 눈에 띄는 요소 등을 설명하는 업적도 있습니다.
카탈로그는 의도적으로 광범위합니다. 인근 지역을 여행하는 사용자는 여전히 의미 있는 발전을 이룰 수 있습니다. 이 시스템은 모든 국가를 수집하려는 사람만을 위한 것이 아닙니다.
인터페이스 하단에서, 업적 평가는 지도 전체를 포괄하는 결정적인 프로세스입니다. 각 업적은 관련 장소 또는 임계값을 정의하고, Mapsake는 해당 정의와 현재 "방문한 곳" 및 "거주지" 기록을 비교하며, 결과에는 진행 상황, 잠금 상태, 날짜 및 메달 티어가 포함됩니다. 이는 분석 서비스나 원격 규칙 엔진에 의존하지 않습니다.
이 방법은 유용한 결과를 가져옵니다. 업적은 오프라인에서 작동하며, 가져오기 또는 수동 변경 후 즉시 업데이트됩니다. 또한 테스트가 용이합니다. 동일한 설정을 사용하면 항상 동일한 업적 세트가 해제됩니다.
카탈로그는 11에서 약 160로 확장되었습니다.
첫 번째 성과 엔진은 11개의 간단한 마일스톤으로 제공되었습니다. 이것은 진행 상황을 지도에서 파생하고, 잠금 해제된 항목을 강조 표시하고, 나머지 진행 상황에 대한 진행률 표시줄을 표시하는 루프를 증명하는 데 충분했습니다. 또한, 확립된 여행 기록을 가진 사람에게는 그다지 흥미롭지 않을 정도로 작았습니다.
두 번째 버전에서는 국가 및 지리적 그룹이 추가되었습니다. 국가별 마일스톤은 거의 동일한 카드 더미가 아니라 하나의 스택으로 통합되었습니다. 대륙 완료 및 유럽 연합, 솅겐 지역, ASEAN, G7, 마그레브, 스탄과 같은 그룹은 여행의 양이 아닌 모양에 대한 목표를 추가했습니다.
이후 카탈로그는 예술, 음악, 과학, 기술, 자연, 지질학, 경제학으로 확장되었습니다. 이것이 Mapsake의 특징을 나타내는 시작점이었습니다. 재즈 역사 그룹과 우주 프로그램 그룹은 지리적으로 겹칠 수 있지만, 해당 장소가 함께 존재하는 이유에 대한 완전히 다른 이야기를 들려줄 수 있습니다.
과제는 임의적인 정보 지식을 피하는 것이었습니다. 모든 그룹은 방어 가능한 고정 멤버십 목록과 함께, 흥미가 사라진 후에도 의미가 있는 설명을 제공해야 합니다. 멤버십은 변경 가능한 웹 서비스에서 가져오는 대신 소스에 저장되며, 카탈로그 업데이트는 다른 제품 동작과 마찬가지로 검토되고 버전 관리됩니다.
160 주변은 검색 및 정렬이 필요할 정도로 많은 정보가 있습니다. 이는 영원히 성장해야 하는 목표가 아닙니다. 수천 개의 이해하기 어려운 절차적 배지보다 작고 일관성 있는 카탈로그가 더 낫습니다.
업적 날짜 및 가족 설정이 인터페이스를 변경했습니다.
카탈로그의 항목 수가 약 80개에 도달하면, 일반적인 그리드 방식이 제대로 작동하지 않았습니다. 동일한 범주의 여러 항목들이 다른 항목들을 가려버려, 오래 사용한 사용자가 어떤 항목이 새로운 것인지 판단하기 어려워졌습니다.
Mapsake은 이제 획득한 업적을 가족별로 그룹화하여 표시하며, 가장 높은 단계가 맨 위에 표시됩니다. 확장하면 이전 단계가 표시됩니다. 잠긴 업적은 목표로 표시되지만, 기본 정렬은 완료에 가장 가까운 항목이 먼저 표시됩니다.
업적 잠금 해제 날짜는 해당 업적이 처음 달성된 시점에 기록됩니다. 이는 나중에 평가되고 친구 스냅샷 내에서 여행하며, 이를 통해 친구의 업적 페이지에서 무언가가 언제 발생했는지 확인할 수 있지만, 개인적인 이벤트 로그는 공개되지 않습니다. 기존 사용자는 초기 실행 시 기준선이 설정되므로, 업데이트를 설치해도 이전 지도에서 이미 달성한 모든 이정표에 대해 눈송이가 쏟아지는 현상은 발생하지 않습니다.
이 기본 동작은 마이그레이션을 기능의 일부로 취급했기 때문에 발생합니다. 70
진행 상황은 이해하기 쉬워야 합니다.
잠긴 아이콘의 벽은 그다지 도움이 되지 않으므로, 업적 탭은 설명 중심으로 구성되어 있습니다.
- 이름으로 검색하고, 카테고리 또는 대륙으로 필터링합니다.
- 가장 가까운 곳, 최근에 해제한 곳, 또는 이미 완료된 곳 순으로 정렬합니다.
- 성취를 열어 설명, 관련 장소, 지도 및 현재 진행 상황을 확인합니다.
- 가족이 지원하는 브론즈, 실버, 골드 및 플래티넘 티어를 살펴보세요.
- 업적을 길게 누르면 자동으로 게시하지 않고 공유 카드 만들기.
업적 잠금 해제는 짧고 촉각적인 경험이며, 자세한 내용은 나중에 확인할 수 있습니다. 어조는 의도적으로 가볍고 때로는 약간 오타쿠입니다. 지리에 대해 무언가를 발견한 듯한 느낌을 받아야 하며, 성과 검토와 같은 느낌을 받아서는 안 됩니다.
세부 정보 화면도 신뢰성 문제를 해결했습니다. "Five Eyes" 또는 "Ring of Fire"와 같은 제목은 모든 사람에게 명확하지 않을 수 있습니다. 열면 전체 설명, 지도 범위, 그룹에 속한 국가, 방문한 국가, 그리고 사용 가능한 경우 방문 날짜 범위를 확인할 수 있습니다. 계층형 패밀리의 경우, 브론즈부터 플래티넘까지 4개의 서로 다른 시각적 시스템 없이도 진행 상황을 나타냅니다.
지도는 목표 달성 여부를 명확하게 보여주기 위해, 방문한 국가뿐만 아니라 아직 방문하지 않은 국가도 강조 표시합니다. 목표가 단 하나의 인접 국가에 있다는 것을 시각적으로 확인할 수 있으면, 단순히 '8 / 9'라고 읽는 것보다 진행 상황을 더 쉽게 이해할 수 있습니다.
축하에는 내비게이션 기능이 포함될 수 없습니다.
테스트 중에 구현상의 세부 사항 하나가 드러났습니다. 원래 성취 기념은 모달 요약처럼 작동했습니다. 카드에는 터치 가능하게 보였지만, 기본 세부 정보를 안정적으로 열 수 있을 만큼 충분한 탐색 상태가 기념 레이어에 없었습니다.
이 수정 사항은 각 상을 메인 카탈로그에서 사용하는 동일한 성취 ID로 처리하고 기존 상세 화면으로 리라우팅하는 것입니다. 축하는 일시적인 표현이며, 성취 모델은 영구적인 정보 소스입니다. 이는 Mapsake의 더 광범위한 규칙 중 하나입니다. 특수 효과는 제품 위에 배치되어야 하며, 제품 자체를 파생시켜서는 안 됩니다.
소셜 네트워크를 구축하지 않고 친구와 공유
Mapsake Friends는 검색 가능한 디렉터리가 아닌 초대부터 시작됩니다. 링크에는 이름이나 계정 대신 개인 공유 코드가 포함되어 있습니다. 링크를 열면 상호 연결이 설정됩니다. 각 사용자는 Mapsake 내에서 상대방의 공유 지도를 볼 수 있습니다.
링크는 거리를 넘어 효과적으로 작동하지만, QR 코드와 근처 발견 기능은 두 사람이 같은 방에 있을 때 유용합니다. 이 앱은 두 개의 완전한 로컬 데이터베이스를 동기화하려고 시도하는 대신, 연결을 위한 간결한 여행 스냅샷을 게시합니다.
첫 번째 공유 모델은 충분히 안정적이지 않았습니다.
이전에는 친구 관계마다 별도의 CloudKit 공유를 사용했습니다. CloudKit이 접근 권한 초대를 처리하므로 매력적이었지만, 상호 친구 관계를 어렵게 만들었습니다. 한 사람이 공유를 수락하면 원래 발신자는 신뢰할 수 있는 방법으로 응답을 받을 수 없었고, 시스템 공유 URL을 예측 가능한 앱 내 흐름으로 변환하기 어려웠습니다.
새 모델은 각 프로필에 안정적인 공유 맵 레코드를 제공하며, 불투명한 코드로 주소가 지정됩니다. 초대 링크는 친구의 레코드를 열고 스냅샷을 캐시하고, 사용자의 맵을 게시하고, 원래 코드에 작은 요청을 보냅니다. 전경 및 배경 새로 고침으로 상호 연결이 완료됩니다.
해당 대체 기능의 첫 번째 버전에서는 안정적인 코드를 직접 링크에 사용했습니다. 이는 작동했지만, 링크가 의도된 대화에서 벗어나면 영원히 재사용될 수 있었습니다. 이제 안정적인 지도 ID 앞에 일회용 초대 토큰이 배치됩니다. 소비된 토큰은 다시 사용할 수 없지만, 기본 친구 관계는 계속 유지됩니다.
이는 제품과 인프라가 함께 변화하는 예입니다. “내 지도를 공유” 버튼은 인터페이스의 한 부분이지만, 그 아래에는 범용 링크 라우팅, CloudKit 레코드 조회, 상호 요청 처리, 로컬 캐싱, 중복 제거 및 명확한 성공 또는 실패 메시지가 있습니다. 이러한 복잡성을 숨기는 것이 중요하며, 존재하지 않는다고 가장하면 오류를 설명할 수 없게 됩니다.
친구의 프로필은 풍부한 정보를 담고 있습니다. 여기에는 인터랙티브 지도, 렌즈, 지역, 연도를 조절할 수 있는 여권, 업적, 그리고 각 사람에게 고유한 장소와 중복되는 부분을 보여주는 비교 보기 등이 포함될 수 있습니다. 홈 핀은 소유자가 명시적으로 공유하도록 설정하지 않는 한 표시되지 않습니다.
이전의 친구 화면은 더 간단한 지구본과 요약 정보를 사용했습니다. 하지만 이는 미리보기처럼 느껴졌으며, 관계성을 나타내는 데 부족했습니다. 현재 인터페이스는 소유자의 아틀라스와 동일한 지도 설정, 동일한 여권 계산, 그리고 동일한 업적 세부 정보 모델을 사용하지만, 데이터 소스는 다릅니다.
이러한 구성 요소를 재사용하면 유용한 추상화가 드러났습니다. 지도 및 여권 화면은 여행 데이터를 소비해야 하며, 해당 데이터가 로그인한 로컬 프로필에 속한다는 것을 가정해서는 안 됩니다. 친구 스냅샷이 이 인터페이스를 구현하면 렌즈 필터링, 연도 범위, 대륙 범위, 업적 진행 상황 및 비교에서 공통 동작을 가능하게 하면서 친구가 소유자의 기본 데이터베이스에 액세스하는 것을 방지할 수 있습니다.
개발 과정에서 그다지 눈에 띄지 않는 탐색 오류가 있었습니다. 친구 목록은 SwiftData 모델 객체에 직접 연결되어 있었지만, CloudKit 동기화로 인해 해당 객체가 재설정되고 탐색 시작 시 ID가 변경되는 문제가 있었습니다. 친구의 안정적인 ID를 사용하여 탐색을 수행하면, 겉보기에는 작동하지 않던 탭 문제가 해결되었습니다. 분산 데이터 오류는 종종 일반적인 인터페이스 오류로 나타납니다.
프로필 사진은 동일한 스냅샷 규칙을 따릅니다. 작은 아바타를 공유 프로필과 함께 게시할 수 있으며, 편집 후 업데이트할 수 있습니다. 사진이 설정되지 않은 경우, 이니셜이 기본값으로 사용됩니다. Mapsake는 첫 번째 초대 시, 식별 가능한 이름과 사진을 입력하도록 안내하지만, 둘 다 필수는 아닙니다.
의미 있는 변경 사항으로 구성된 피드입니다.
친구 탭은 업로드된 게시물 스트림이 아닙니다. Mapsake는 장치에 이미 저장된 최신 친구 스냅샷과 비교하여, 친구가 새로운 장소를 추가하거나 성과를 달성한 경우, 해당 변경 사항을 작은 로컬 활동 피드로 표시합니다.
이 스냅샷 비교 방식은 기능을 단순하게 유지합니다. 친구들이 자신의 지도가 변경될 때마다 게시물을 작성할 필요가 없으며, Mapsake는 콘텐츠 순위 시스템이 필요하지 않습니다. 피드는 기본 여행 기록이 변경되었을 때 유용한 이벤트를 기록합니다.
또한, 각 피드 이벤트에 대해 별도의 CloudKit 레코드 유형을 추가하는 것을 방지합니다. 앱은 이미 이전 스냅샷과 새 스냅샷을 가지고 있습니다. 이들의 위치 식별자와 성취 잠금 해제를 비교하여 흥미로운 변경 사항을 로컬에서 파생하고, 작은 JSON 저장소에 바운드된 피드를 장치에 보관할 수 있습니다.
장소 추가 및 업적 해제는 별도의 그룹으로 묶여 표시됩니다. 이는 하나의 새로 고침으로 여러 항목이 추가되더라도 수십 개의 거의 동일한 행이 생성되는 것을 방지하며, 대신 "Emma가 일본, 교토 및 추가 2곳을 추가했습니다"와 같이 데이터베이스 트랜잭션 로그처럼 표시됩니다.
알림은 각 여행 기록에 대해 활성화할 수 있으며, 일정 간격을 두고 설정할 수 있습니다. 이렇게 하면 대량의 기록을 가져올 때 알림이 과도하게 발생하지 않도록 할 수 있습니다. 사용자가 직접 확인하고 싶을 때는 새로 고침 기능을 사용할 수 있습니다.
개인 정보 보호는 기능의 일부이며, 면책 조항이 아닙니다.
여행 기록은 집, 일상, 그리고 미래 계획을 드러낼 수 있습니다. 따라서 Friends 기능은 기존의 소셜 기능보다 더 명확해야 합니다.
- 다른 사람을 추가하려면 초대, QR 코드 스캔 또는 근처에서 직접 교환해야 합니다.
- 공유 페이로드에는 친구 경험에 필요한 지도 데이터가 포함되어 있으며, 사진 라이브러리의 복사본이 아닙니다.
- 홈 공유는 별도의 기능이며, 기본적으로 비활성화되어 있습니다.
- 친구를 삭제하면 로컬 관계와 관련된 캐시된 활동이 삭제됩니다.
- Mapsake의 기본 기능을 사용하려면 Mapsake 계정이 필요하지 않습니다.
친구 스냅샷에는 원본 사진 데이터가 포함되지 않습니다. 여행 기록, 프로필 정보, 렌즈 정보, 범위 통계에 필요한 날짜, 그리고 친구가 사용할 수 있는 인터페이스에 필요한 업적 잠금 해제 정보가 포함되어 있습니다. 이러한 제한은 풍부한 경험이 의도치 않게 사진 공유 서비스로 변질되는 것을 방지합니다.
Mapsake는 친구 공유와 공개 브라우저 링크를 구별합니다. 친구 연결은 상호적이며 앱 내에 있습니다. 공개 지도는 읽기 전용 링크를 원하는 사용자를 위한 별도의 선택적 기능입니다. 하나를 활성화해도 다른 하나가 자동으로 활성화되지는 않습니다.
업적과 친구는 지도를 더욱 재미있게 만들지만, 공개 프로필로 만들지는 않습니다. 이 경계는 중요하며, 앱이 성장함에 따라 반복적으로 강조되어야 합니다.
업데이트를 실행하세요.
열기. 업적 전체 카탈로그를 검색하여 가장 가까운 항목을 확인하고 엽니다. 친구, 을 공유하거나 초대 링크를 사용하거나 근처에 있는 사람이나 QR 코드를 사용하여 지도를 비교해 보세요.
가장 좋은 결과는 더 높은 점수가 아닙니다. 대화입니다. 양쪽 모두가 사랑한 장소, 한 번도 생각해 본 적이 없는 지역, 또는 둘 다 달성할 수 있다고 생각하지 않았던 작은 성취입니다.