diff --git a/.gitignore b/.gitignore
index 4ab29506a..da6478527 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,10 @@
## User settings
xcuserdata/
+.env
+master.key
+
+
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
diff --git a/14th-team5-iOS/App/Project.swift b/14th-team5-iOS/App/Project.swift
index a6502d0ac..8aabad546 100644
--- a/14th-team5-iOS/App/Project.swift
+++ b/14th-team5-iOS/App/Project.swift
@@ -15,10 +15,11 @@ private let targets: [Target] = [
products: .app,
dependencies: ModuleLayer.App.dependencies,
bundleId: "com.5ing.bibbi",
- infoPlist: .extendingDefault(with: [
- "CFBundleVersion": .string("1"),
+ infoPlist: .extendingDefault(with: [
"CFBundleDisplayName": .string("Bibbi"),
+ "CFBundleVersion": .string("1"),
"CFBuildVersion": .string("0"),
+ "CFBundleShortVersionString": .string("1.0.1"),
"UILaunchStoryboardName": .string("Launch Screen"),
"UISupportedInterfaceOrientations": .array([.string("UIInterfaceOrientationPortrait")]),
"UIUserInterfaceStyle": .string("Light"),
diff --git a/pippi.xcworkspace/.tuist-generated b/Derived/.fl25C0AF36
similarity index 100%
rename from pippi.xcworkspace/.tuist-generated
rename to Derived/.fl25C0AF36
diff --git a/Derived/signing.keychain b/Derived/signing.keychain
new file mode 100644
index 000000000..5e722ce05
Binary files /dev/null and b/Derived/signing.keychain differ
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 000000000..7a118b49b
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "fastlane"
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 000000000..7d52a7762
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,214 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (3.0.6)
+ rexml
+ addressable (2.8.6)
+ public_suffix (>= 2.0.2, < 6.0)
+ artifactory (3.0.15)
+ atomos (0.1.3)
+ aws-eventstream (1.3.0)
+ aws-partitions (1.878.0)
+ aws-sdk-core (3.190.2)
+ aws-eventstream (~> 1, >= 1.3.0)
+ aws-partitions (~> 1, >= 1.651.0)
+ aws-sigv4 (~> 1.8)
+ jmespath (~> 1, >= 1.6.1)
+ aws-sdk-kms (1.76.0)
+ aws-sdk-core (~> 3, >= 3.188.0)
+ aws-sigv4 (~> 1.1)
+ aws-sdk-s3 (1.142.0)
+ aws-sdk-core (~> 3, >= 3.189.0)
+ aws-sdk-kms (~> 1)
+ aws-sigv4 (~> 1.8)
+ aws-sigv4 (1.8.0)
+ aws-eventstream (~> 1, >= 1.0.2)
+ babosa (1.0.4)
+ claide (1.1.0)
+ colored (1.2)
+ colored2 (3.1.2)
+ commander (4.6.0)
+ highline (~> 2.0.0)
+ declarative (0.0.20)
+ digest-crc (0.6.5)
+ rake (>= 12.0.0, < 14.0.0)
+ domain_name (0.6.20240107)
+ dotenv (2.8.1)
+ emoji_regex (3.2.3)
+ excon (0.109.0)
+ faraday (1.10.3)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-cookie_jar (0.0.7)
+ faraday (>= 0.8.0)
+ http-cookie (~> 1.0.0)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.0.4)
+ multipart-post (~> 2)
+ faraday-net_http (1.0.1)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.0)
+ faraday (~> 1.0)
+ fastimage (2.3.0)
+ fastlane (2.219.0)
+ CFPropertyList (>= 2.3, < 4.0.0)
+ addressable (>= 2.8, < 3.0.0)
+ artifactory (~> 3.0)
+ aws-sdk-s3 (~> 1.0)
+ babosa (>= 1.0.3, < 2.0.0)
+ bundler (>= 1.12.0, < 3.0.0)
+ colored
+ commander (~> 4.6)
+ dotenv (>= 2.1.1, < 3.0.0)
+ emoji_regex (>= 0.1, < 4.0)
+ excon (>= 0.71.0, < 1.0.0)
+ faraday (~> 1.0)
+ faraday-cookie_jar (~> 0.0.6)
+ faraday_middleware (~> 1.0)
+ fastimage (>= 2.1.0, < 3.0.0)
+ gh_inspector (>= 1.1.2, < 2.0.0)
+ google-apis-androidpublisher_v3 (~> 0.3)
+ google-apis-playcustomapp_v1 (~> 0.1)
+ google-cloud-env (>= 1.6.0, < 2.0.0)
+ google-cloud-storage (~> 1.31)
+ highline (~> 2.0)
+ http-cookie (~> 1.0.5)
+ json (< 3.0.0)
+ jwt (>= 2.1.0, < 3)
+ mini_magick (>= 4.9.4, < 5.0.0)
+ multipart-post (>= 2.0.0, < 3.0.0)
+ naturally (~> 2.2)
+ optparse (>= 0.1.1)
+ plist (>= 3.1.0, < 4.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
+ security (= 0.1.3)
+ simctl (~> 1.6.3)
+ terminal-notifier (>= 2.0.0, < 3.0.0)
+ terminal-table (~> 3)
+ tty-screen (>= 0.6.3, < 1.0.0)
+ tty-spinner (>= 0.8.0, < 1.0.0)
+ word_wrap (~> 1.0.0)
+ xcodeproj (>= 1.13.0, < 2.0.0)
+ xcpretty (~> 0.3.0)
+ xcpretty-travis-formatter (>= 0.0.3)
+ gh_inspector (1.1.3)
+ google-apis-androidpublisher_v3 (0.54.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-core (0.11.2)
+ addressable (~> 2.5, >= 2.5.1)
+ googleauth (>= 0.16.2, < 2.a)
+ httpclient (>= 2.8.1, < 3.a)
+ mini_mime (~> 1.0)
+ representable (~> 3.0)
+ retriable (>= 2.0, < 4.a)
+ rexml
+ webrick
+ google-apis-iamcredentials_v1 (0.17.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-playcustomapp_v1 (0.13.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-storage_v1 (0.31.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-cloud-core (1.6.1)
+ google-cloud-env (>= 1.0, < 3.a)
+ google-cloud-errors (~> 1.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
+ google-cloud-errors (1.3.1)
+ google-cloud-storage (1.47.0)
+ addressable (~> 2.8)
+ digest-crc (~> 0.4)
+ google-apis-iamcredentials_v1 (~> 0.1)
+ google-apis-storage_v1 (~> 0.31.0)
+ google-cloud-core (~> 1.6)
+ googleauth (>= 0.16.2, < 2.a)
+ mini_mime (~> 1.0)
+ googleauth (1.8.1)
+ faraday (>= 0.17.3, < 3.a)
+ jwt (>= 1.4, < 3.0)
+ multi_json (~> 1.11)
+ os (>= 0.9, < 2.0)
+ signet (>= 0.16, < 2.a)
+ highline (2.0.3)
+ http-cookie (1.0.5)
+ domain_name (~> 0.5)
+ httpclient (2.8.3)
+ jmespath (1.6.2)
+ json (2.7.1)
+ jwt (2.7.1)
+ mini_magick (4.12.0)
+ mini_mime (1.1.5)
+ multi_json (1.15.0)
+ multipart-post (2.3.0)
+ nanaimo (0.3.0)
+ naturally (2.2.1)
+ optparse (0.4.0)
+ os (1.1.4)
+ plist (3.7.1)
+ public_suffix (5.0.4)
+ rake (13.1.0)
+ representable (3.2.0)
+ declarative (< 0.1.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
+ uber (< 0.2.0)
+ retriable (3.1.2)
+ rexml (3.2.6)
+ rouge (2.0.7)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.3.2)
+ security (0.1.3)
+ signet (0.18.0)
+ addressable (~> 2.8)
+ faraday (>= 0.17.5, < 3.a)
+ jwt (>= 1.5, < 3.0)
+ multi_json (~> 1.10)
+ simctl (1.6.10)
+ CFPropertyList
+ naturally
+ terminal-notifier (2.0.0)
+ terminal-table (3.0.2)
+ unicode-display_width (>= 1.1.1, < 3)
+ trailblazer-option (0.1.2)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.2)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
+ uber (0.1.0)
+ unicode-display_width (2.5.0)
+ webrick (1.8.1)
+ word_wrap (1.0.0)
+ xcodeproj (1.23.0)
+ CFPropertyList (>= 2.3.3, < 4.0)
+ atomos (~> 0.1.3)
+ claide (>= 1.0.2, < 2.0)
+ colored2 (~> 3.1)
+ nanaimo (~> 0.3.0)
+ rexml (~> 3.2.4)
+ xcpretty (0.3.0)
+ rouge (~> 2.0.7)
+ xcpretty-travis-formatter (1.0.1)
+ xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+ arm64-darwin-23
+
+DEPENDENCIES
+ fastlane
+
+BUNDLED WITH
+ 2.4.10
diff --git a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
index 94ac068aa..5e9cf31b3 100644
--- a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
+++ b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
@@ -58,7 +58,10 @@ extension Project {
name: name,
settings: .settings(
base: [
- "OTHER_LDFLAGS": ["-ObjC"]
+ "OTHER_LDFLAGS": ["-ObjC"],
+ "MARKETING_VERSION": "1.0",
+ "CURRENT_PROJECT_VERSION": "1",
+ "VERSIONING_SYSTEM": "apple-generic"
],
configurations: [
.build(.dev, name: name),
diff --git a/Tuist/Signing/App.DEV.mobileprovision b/Tuist/Signing/App.DEV.mobileprovision
new file mode 100644
index 000000000..f5c3c85e5
Binary files /dev/null and b/Tuist/Signing/App.DEV.mobileprovision differ
diff --git a/Tuist/Signing/App.PRD.mobileprovision b/Tuist/Signing/App.PRD.mobileprovision
new file mode 100644
index 000000000..ed3c43af3
Binary files /dev/null and b/Tuist/Signing/App.PRD.mobileprovision differ
diff --git a/Tuist/Signing/WidgetExtension.DEV.mobileprovision b/Tuist/Signing/WidgetExtension.DEV.mobileprovision
new file mode 100644
index 000000000..345fb7aef
Binary files /dev/null and b/Tuist/Signing/WidgetExtension.DEV.mobileprovision differ
diff --git a/Tuist/Signing/WidgetExtension.PRD.mobileprovision b/Tuist/Signing/WidgetExtension.PRD.mobileprovision
new file mode 100644
index 000000000..4cfc2e806
Binary files /dev/null and b/Tuist/Signing/WidgetExtension.PRD.mobileprovision differ
diff --git a/Tuist/Signing/dev.cer.encrypted b/Tuist/Signing/dev.cer.encrypted
new file mode 100644
index 000000000..6de0e034f
--- /dev/null
+++ b/Tuist/Signing/dev.cer.encrypted
@@ -0,0 +1 @@
+8swITUEudH2irvn3VenCtQ==-h7DUWmHhbKO+aU5iODXAlhwo22SMtBKUabf1T5mAM5Ct/+TSuWxubxX6+EdlCU/lVsAiNa9Re+4WNttcQ0slQLyMSQXiizj22nuT7aKywVxbYbksaK4EYgCAzTngP+niwh/5Yx9FS1MHpL483Uh3D40xK6iiEK7OPDijdLismi2JVCnzh2X5QavgS64CD+JAF0QaQm1qC2Nk8d39z/qDwxjzPfRLosgz/3mmULHVa5i2cF+eTolazYxiyZtv2DLrgk6OF0vJYcNjw4NiN2AaCjPR/FB+a0t2nNEvWb/o/iCNztjrdrXCX2TRUVtmZMkZGnP/WbDwFvS+1krCWF7Q49UQkKSREUKnuH33K+HZwiHvofBBBps2EVHbPLesONglkeK2bOYRa0iPOw9zoP1h0+Slb25wEcxOdYlhG8Du+kFA5oQ+aH8MKtwMntORmnwF0ttbQCQNUWGhpipJN4kBfAHoEP/BRC7yQVcXSY36gg6HTOG+sRnPRmzxsKu3ycJhWXi68oTk0qg1RyRSuw07/WrziP8kd1Pimw1AzREORg9HdXrXXU1OASkTFHaz6p2N+6yzVGionEMFaNdscjzInLKeLdzmTt7i6sG+hyPtndqlp9ompqE7NghpJkOfPZfkvfGxbJOa05AgC80LIttvUKPUqn3HjUcZcj4/UImZm0vOXWqvpCpnUQSjqJiC6qLz7+w8kM/qpbtCGSCzfwr+7SgTn7+1vahJTLzUNKzLSyxgOijl4ufThRNPh2/VFRVezU/LmqgkdNlVTxlaN7AlxIEs+ODMw4fDb4vLBrwtmxWdDzVevHFUfKrXWmCFR/IXvOehwBwJba7q3h2W3g/lNt+gWOkBKmH5MfaSZwgLxjJNDHFOVk2ofCzBOA9J8cfh21vk4VWqbLyu/wb9GY4JhlHJTw2w6JOpCoon3lW6ySZWKv0I+gaDKutyZBPQykkWtVeUlqHjp54Z40YYFs7PqJmvx6YQMVLbzrB86ecUudNGaMWNIqEbIr9QO9IjBweHaylYFo9NtOd4a2So8OuXM88iAubrATspaIqu+q3wrOJAey8YWOeI7uCosxwlM613/9Wjt7bOEP7gOMlXFXSSD45eXlwZFRAu8haacQlEixkv6UdA+2aMxvA/CnQNqtBp2+Gi9TNyFRUtZqJTn59K33FgvBCENW0NfBgcpBoPpicHfTptnTf1YaXAUNZAPZdY87zCfNcu5++O8nPhzjJIaq3dXnojTilWeyqk1+sJBl/xCHtjWueExpLM+seyg/VzLhO1u70XWfZFPUoJH6HIg0wUc/ZpWFW6PFa83RirOqp2keXlJvZwmMLRvF494fKy6Z0FjAxTdS77RUCT9pOwi7MsqKiggJdlmtHnv67bjJFp3pa26potL01Sy0M43lxBn7G81s1r34FDlGCc8PnOW9yvYmpe1aD3x2aklRrDuwtCLu34SEgsf4uZlXwxnTilJp9V1fsnp+/Ul6qI0XmnKpnNTXomDl1kY1Uj+2dnbdl43RfFIWcO/KPcgC1KYeSpVFMrI8A1+8jplBxcBgBqU9b7PPn8ksjS56mpD9bML1JpLTze+moI3ltRGQLvD7l7sqH1HuDtUE4NsmHDSkq3UxZdAD+cNdAKduRM+sAgxGz47abjxid6q/dlLDRYbhOacniK2TcZDUGpsfSGWy0/A+Dk769pI6PFxDaQ5SfVcxhFuXDfRVMZDz0R6nKrJiwfVGiH638z9yB1E6lfb572wcYJvuKQu6SG4x9CgGPORppxS5I4c1Ve2HeH8dNS9wB6qlygMXvndZOtuSBk5pG3dt25+RAWW2C9o+Xuqt0FP6ZCZyi1VUwK9BYLO3R9+81Ml6vsKCznls73YTKPMC/5Qh6yjQ9aDGLD9VGr7OY0XF93dkKBxJ5YOZboUBpaaQ5KSwv5DMhm4uan6KX1W41Csxub440WgPIzTxajcrYnGMbkAesk8IcRzAxwD7w=
\ No newline at end of file
diff --git a/Tuist/Signing/dev.p12.encrypted b/Tuist/Signing/dev.p12.encrypted
new file mode 100644
index 000000000..5dec0c9dd
--- /dev/null
+++ b/Tuist/Signing/dev.p12.encrypted
@@ -0,0 +1 @@
+MSjX1AoIhvMnupeCRWmz+g==-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
\ No newline at end of file
diff --git a/Tuist/Signing/prd.cer.encrypted b/Tuist/Signing/prd.cer.encrypted
new file mode 100644
index 000000000..ee11af14f
--- /dev/null
+++ b/Tuist/Signing/prd.cer.encrypted
@@ -0,0 +1 @@
+Jz/iFxko5ojRoPV823rn7g==-Mrj5yXoNiRUfG1JZchAH1FymrfUk68o9RLyqjIe5dKGxoPUyKOb8mLvnyNyG3LEdvT1CTjEMVij5JG3VPPOv31HhjmjFRCz59fP55lAoSfGagFL1ytCprePRhQJOLW7Cvqg/npg1ELeYQ9Q6p8qCDkE3wD4xaD7fWtZElc3liIqLXb4FjZ0E8L+G1oTjDb7Bv4o6EdEdlo5wdb82g2sHJBmN78NbhsgJTBTroXd0gbf/HN9P/OC8M84/QgQyw7zVlZETpJBmXJCrpkcZFFxikQ3CtOj4EZiAehtoMlJprtmYeXplSnReqDTfqFbfSQ2qTP7R/eMI3b3g24/49taViFx+qnVD5FPXE9d8kKvt6E3OS+bhUYsPPU+fOwmrvIEV+SdG/nPSSIqGAKKDtfr0b22RjdQMpeJi3lPfoqqtnrjGpcgfATYvZHUGp9nKNiS8Y+d0EkVDE09bByarbmbVJUUN0dUris74ppRAREKwAY/MXMDXqn9th45oqwqzwVwztLD95+Ok9qzapziNcrxRM2iOcX4O4V20Ak3j6tIywGBHcy9QPFQXz4orgprRRu8QAtat87A1OwD27cD6nwN9+G26Qy+PBbJYUweFQt0X+wKHimgk2Ag7nQonU4kK9tspKCjjVbSgOnhApU3E+ChI381pq4s+5DVqH9S6wZTZGqR2knY8FFJnPL8t4/PiOyqB5wmKNOOZD79Qv//FV4kir1lHhepHEnS8XCBtg/0fcZK1O4/fum6WxsL3wszX/ooUfDaDTEd4ucgjFJfT8ttkRE1XyFw+Qsrn2h4IGe//pObVQuVosd3iMM4mQYNC9dIfTJ36voNbJfldIDn9yWsNZ6Qz7RfvrONYrvWYI2YjV3vmjllRusSN0AXv3IrNIrVstQ/QVqo+9PUTTWD1T/PpnDn27ZTOKZ1DE7SkOObp4SkzfhIVbEekqt+jK9kVOOffYXs+EPDS5t3GOst+rvM5BH8xhQ1Bm9+l1WzKCSo9z8Nj2Vk/fll9TiOCvSDR/gMdmsPvmieRbRn4OPGKjueo2KX2xVE81+7WVtxMoqsLJVy2m62xWTMcL0bYfZhsTH0FIsCp8mKFdExPTypBXxLjFFEWFLy42YamektZLKkjzWn7bLwOXzvqHxzxK/u+qrkXGK4sDGyAI7CXQVr9n6VuUPW/hPFBaLY6Q1jnnlVOi3oItxMYMSC0ILObWOGJX/61oq7Mmb+zEdGxGN4ZGi5YUT6Em++C0BX/ii/9/1c8N8pF1059JJak/NniVtb8iDYNkja136bDfLfKtPWhb1M6fWUAKXOksYvAwVM9EeHh2M8elvQiw3qlhI9NAFaybiYmIA5iY+GhQLaEiC89iNiSN+l8JI83V2se1CLuxe3/GKfPeFcaFSXz+7/yg2WnUgpb6S603+8Bb3CKJqSXBfgoPHOzz09NpwauDU2HpqWlF17xaxTpxFdoLhhE/aLK+VXKN8CjwxWLiziiJsP9wJdpCQFJKL0Pk4XicD0bw3iT1dNRzFfxyMY+nf6BrOlPHQeWY0zoJpxtUIGx0yYDwkkTSVrwdXA3lxIuIzMD9ok3kvWixH0KR7pXval/HABntm8FQ9PHrJlLFDx4eIvjjL7iPQH6PKsiiBo3IPlENoM4cfjMMl3VIgn/svxVB06P7Kw7SVDG3vjWLDrzDTg1g1MW6P9nQX8vGM+v0u2gvF3HSM15We++XXFICSQM7DrVU2A6W9GAvuJrZNsemzKJpplH6bQdtNLDrxQHz8JX0aIP4k9HPT8LZ3muSNlPvvST89fDZvqcf+NVmWKEWdL0nqXrmRYOTh/uRGthn0gIkqFJAZtFunpXokyAlQrpZWHaN1syEzjbM0kkcS3HUNUp8Dw6Clmjq0dEmoLLA6fMvey0cAnVcPdjhu9nPHFe9SK5uioUQslI1vD8wSvk9GSqvFQr+wBJpt/oo1HlHPV9iWoxizRu5uXSdwjLncpknGyZ
\ No newline at end of file
diff --git a/Tuist/Signing/prd.p12.encrypted b/Tuist/Signing/prd.p12.encrypted
new file mode 100644
index 000000000..9fa38611c
--- /dev/null
+++ b/Tuist/Signing/prd.p12.encrypted
@@ -0,0 +1 @@
+/BYbMJdVzq+j1Zl0YF5zyg==-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
\ No newline at end of file
diff --git a/fastlane/Appfile b/fastlane/Appfile
new file mode 100644
index 000000000..cc0715d35
--- /dev/null
+++ b/fastlane/Appfile
@@ -0,0 +1,10 @@
+# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
+# apple_id("[[APPLE_ID]]") # Your Apple Developer Portal username
+
+
+# For more information about the Appfile, see:
+# https://docs.fastlane.tools/advanced/#appfile
+
+gem "dotenv"
+
+app_identifier(ENV["BUNDLE_ID"])
\ No newline at end of file
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
new file mode 100644
index 000000000..a2ecad070
--- /dev/null
+++ b/fastlane/Fastfile
@@ -0,0 +1,218 @@
+# This file contains the fastlane.tools configuration
+# You can find the documentation at https://docs.fastlane.tools
+#
+# For a list of all available actions, check out
+#
+# https://docs.fastlane.tools/actions
+#
+# For a list of all available plugins, check out
+#
+# https://docs.fastlane.tools/plugins/available-plugins
+#
+
+# Uncomment the line if you want fastlane to automatically update itself
+# update_fastlane
+
+#✅ 상수
+APP_NAME = ENV["APP_NAME"]
+WIDGET_NAME = ENV["WIDGET_NAME"]
+
+PRD_SCHEME = ENV["PRD_SCHEME"]
+DEV_SCHEME = ENV["DEV_SCHEME"]
+BUNDLE_ID = ENV["BUNDLE_ID"]
+WIDGET_BUNDLE_ID = ENV["WIDGET_BUNDLE_ID"]
+
+APP_STORE_CONNECT_KEY_ID = ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"]
+APP_STORE_CONNECT_ISSUER_ID = ENV["APP_STORE_CONNECT_API_KEY_ISSUER_ID"]
+APP_STORE_CONNECT_API_KEY = ENV["APP_STORE_CONNECT_API_KEY_KEY"]
+
+KEYCHAIN_NAME = ENV["KEYCHAIN_NAME"]
+KEYCHAIN_PASSWORD = ENV["KEYCHAIN_PASSWORD"]
+
+PROJECT_PATH = ENV["PROJECT_PATH"]
+SLACK_HOOK_URL = ENV["SLACK_HOOK_URL"]
+
+
+default_platform(:ios)
+
+platform :ios do
+ #✅ 인증서를 키체인에 저장
+ lane :setup_keychain do
+ create_keychain(
+ name: "#{KEYCHAIN_NAME}",
+ password: "#{KEYCHAIN_PASSWORD}",
+ default_keychain: true,
+ unlock: true,
+ timeout: 3600,
+ lock_when_sleeps: true
+ )
+
+ import_certificate(
+ certificate_path: "Tuist/Signing/prd.cer",
+ keychain_name: "#{KEYCHAIN_NAME}",
+ keychain_password: "#{KEYCHAIN_PASSWORD}"
+ )
+
+ import_certificate(
+ certificate_path: "Tuist/Signing/prd.p12",
+ keychain_name: "#{KEYCHAIN_NAME}",
+ keychain_password: "#{KEYCHAIN_PASSWORD}"
+ )
+
+ import_certificate(
+ certificate_path: "Tuist/Signing/dev.cer",
+ keychain_name: "#{KEYCHAIN_NAME}",
+ keychain_password: "#{KEYCHAIN_PASSWORD}"
+ )
+
+ import_certificate(
+ certificate_path: "Tuist/Signing/dev.p12",
+ keychain_name: "#{KEYCHAIN_NAME}",
+ keychain_password: "#{KEYCHAIN_PASSWORD}"
+ )
+
+ install_provisioning_profile(path: "Tuist/Signing/#{APP_NAME}.PRD.mobileprovision")
+ install_provisioning_profile(path: "Tuist/Signing/#{APP_NAME}.DEV.mobileprovision")
+
+ install_provisioning_profile(path: "Tuist/Signing/#{WIDGET_NAME}.PRD.mobileprovision")
+ install_provisioning_profile(path: "Tuist/Signing/#{WIDGET_NAME}.DEV.mobileprovision")
+ end
+
+
+
+
+ #✅ 테스트 플라이트에 PRD 업로드
+ lane :upload_prd_to_testflight do |options|
+ app_store_connect_api_key(
+ key_id: "#{APP_STORE_CONNECT_KEY_ID}",
+ issuer_id: "#{APP_STORE_CONNECT_ISSUER_ID}",
+ key_content: "#{APP_STORE_CONNECT_API_KEY}",
+ is_key_content_base64: true,
+ in_house: false
+ )
+
+ new_build_number = latest_testflight_build_number() + 1
+
+ increment_build_number(
+ xcodeproj: "#{PROJECT_PATH}",
+ build_number: new_build_number
+ )
+
+ build_app(
+ workspace: "#{APP_NAME}.xcworkspace",
+ scheme: "#{PRD_SCHEME}",
+ export_method: "app-store",
+ export_options: {
+ method: "app-store",
+ provisioningProfiles: {
+ "#{BUNDLE_ID}" => "App.PRD",
+ "#{WIDGET_BUNDLE_ID}" => "WidgetExtension.PRD",
+ }
+ }
+ )
+
+ upload_to_testflight(skip_waiting_for_build_processing: true)
+
+ slack(
+ message: "⭐️ 테스트 플라이트 업로드 성공",
+ slack_url: "#{SLACK_HOOK_URL}",
+ username: "오잉봇",
+ icon_url: "https://avatars.githubusercontent.com/u/21079970?v=4",
+ payload: {
+ "Build Date" => Time.new.to_s,
+ },
+ attachment_properties: {
+ fields: [
+ {
+ title: "Scheme",
+ value: "#{PRD_SCHEME}",
+ },
+ {
+ title: "Build Number",
+ value: "#{new_build_number.to_s}",
+ }
+ ]
+ },
+ success: true
+ )
+ end
+
+ #✅ 테스트 플라이트에 DEV 업로드
+ lane :upload_dev_to_testflight do |options|
+ app_store_connect_api_key(
+ key_id: "#{APP_STORE_CONNECT_KEY_ID}",
+ issuer_id: "#{APP_STORE_CONNECT_ISSUER_ID}",
+ key_content: "#{APP_STORE_CONNECT_API_KEY}",
+ is_key_content_base64: true,
+ in_house: false
+ )
+
+ new_build_number = latest_testflight_build_number() + 1
+
+ increment_build_number(
+ xcodeproj: "#{PROJECT_PATH}",
+ build_number: new_build_number
+ )
+
+ build_app(
+ workspace: "#{APP_NAME}.xcworkspace",
+ scheme: "#{DEV_SCHEME}",
+ export_method: "app-store",
+ export_options: {
+ method: "app-store",
+ provisioningProfiles: {
+ "#{BUNDLE_ID}" => "App.DEV",
+ "#{WIDGET_BUNDLE_ID}" => "WidgetExtension.DEV",
+ }
+ }
+ )
+
+ upload_to_testflight(skip_waiting_for_build_processing: true)
+
+ slack(
+ message: "⭐️ 테스트 플라이트 업로드 성공",
+ slack_url: "#{SLACK_HOOK_URL}",
+ username: "오잉봇",
+ icon_url: "https://avatars.githubusercontent.com/u/21079970?v=4",
+ payload: {
+ "Build Date" => Time.new.to_s,
+ },
+ attachment_properties: {
+ fields: [
+ {
+ title: "Scheme",
+ value: "#{DEV_SCHEME}-DEV",
+ },
+ {
+ title: "Build Number",
+ value: "#{new_build_number.to_s}",
+ }
+ ]
+ },
+ success: true
+ )
+ end
+
+
+
+
+ #🔴 예외 처리
+ error do |lane, exception, options|
+ slack(
+ message: "❗️ 테스트 플라이트 업로드 실패",
+ slack_url: "#{SLACK_HOOK_URL}",
+ username: "오잉봇",
+ icon_url: "https://avatars.githubusercontent.com/u/21079970?v=4",
+ success: false,
+ attachment_properties: {
+ fields: [
+ {
+ title: "Error message",
+ value: "#{exception.to_s}",
+ short: false
+ }
+ ]
+ },
+ )
+ end
+end
diff --git a/fastlane/README.md b/fastlane/README.md
new file mode 100644
index 000000000..0033236ef
--- /dev/null
+++ b/fastlane/README.md
@@ -0,0 +1,48 @@
+fastlane documentation
+----
+
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```sh
+xcode-select --install
+```
+
+For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
+
+# Available Actions
+
+## iOS
+
+### ios setup_keychain
+
+```sh
+[bundle exec] fastlane ios setup_keychain
+```
+
+
+
+### ios upload_prd_to_testflight
+
+```sh
+[bundle exec] fastlane ios upload_prd_to_testflight
+```
+
+
+
+### ios upload_dev_to_testflight
+
+```sh
+[bundle exec] fastlane ios upload_dev_to_testflight
+```
+
+
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+
+More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
+
+The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
diff --git a/pippi.xcworkspace/contents.xcworkspacedata b/pippi.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 76c7ae11b..000000000
--- a/pippi.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pippi.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/pippi.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/pippi.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/pippi.xcworkspace/xcshareddata/xcschemes/pippi-Workspace.xcscheme b/pippi.xcworkspace/xcshareddata/xcschemes/pippi-Workspace.xcscheme
deleted file mode 100644
index c0d13346c..000000000
--- a/pippi.xcworkspace/xcshareddata/xcschemes/pippi-Workspace.xcscheme
+++ /dev/null
@@ -1,902 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-