Rebrand from Casera/MyCrib to honeyDue

Total rebrand across KMM project:
- Kotlin package: com.example.casera -> com.tt.honeyDue (dirs + declarations)
- Gradle: rootProject.name, namespace, applicationId
- Android: manifest, strings.xml (all languages), widget resources
- iOS: pbxproj bundle IDs, Info.plist, entitlements, xcconfig
- iOS directories: Casera/ -> HoneyDue/, CaseraTests/ -> HoneyDueTests/, etc.
- Swift source: all class/struct/enum renames
- Deep links: casera:// -> honeydue://, .casera -> .honeydue
- App icons replaced with honeyDue honeycomb icon
- Domains: casera.treytartt.com -> honeyDue.treytartt.com
- Bundle IDs: com.tt.casera -> com.tt.honeyDue
- Database table names preserved

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-03-07 06:33:57 -06:00
parent 9c574c4343
commit 1e2adf7660
450 changed files with 1730 additions and 1788 deletions

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>honeyDue Thumbnail</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>QLSupportedContentTypes</key>
<array>
<string>com.honeydue.contractor</string>
</array>
<key>QLThumbnailMinimumDimension</key>
<integer>0</integer>
</dict>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).ThumbnailProvider</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.quicklook.thumbnail</string>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,75 @@
//
// ThumbnailProvider.swift
// honeyDueQLThumbnail
//
// Created by Trey Tartt on 12/6/25.
//
import UIKit
import QuickLookThumbnailing
class ThumbnailProvider: QLThumbnailProvider {
/// Represents the type of .honeydue package
private enum PackageType {
case contractor
case residence
}
override func provideThumbnail(for request: QLFileThumbnailRequest, _ handler: @escaping (QLThumbnailReply?, Error?) -> Void) {
let thumbnailSize = request.maximumSize
// Detect package type from file
let packageType = detectPackageType(at: request.fileURL)
handler(QLThumbnailReply(contextSize: thumbnailSize, currentContextDrawing: { () -> Bool in
// Draw background
let backgroundColor = UIColor(red: 7/255, green: 160/255, blue: 195/255, alpha: 1)
backgroundColor.setFill()
UIRectFill(CGRect(origin: .zero, size: thumbnailSize))
// Choose icon based on package type
let iconName: String
switch packageType {
case .contractor:
iconName = "person.crop.rectangle.stack"
case .residence:
iconName = "house.fill"
}
// Draw icon
let config = UIImage.SymbolConfiguration(pointSize: min(thumbnailSize.width, thumbnailSize.height) * 0.5, weight: .regular)
if let icon = UIImage(systemName: iconName, withConfiguration: config) {
let tintedIcon = icon.withTintColor(.white, renderingMode: .alwaysOriginal)
let iconSize = tintedIcon.size
let iconOrigin = CGPoint(
x: (thumbnailSize.width - iconSize.width) / 2,
y: (thumbnailSize.height - iconSize.height) / 2
)
tintedIcon.draw(at: iconOrigin)
}
return true
}), nil)
}
/// Lightweight struct to detect the package type via Codable instead of JSONSerialization
private struct PackageTypeEnvelope: Decodable {
let type: String?
}
/// Detects the package type by reading the "type" field from the JSON
private func detectPackageType(at url: URL) -> PackageType {
do {
let data = try Data(contentsOf: url)
let envelope = try JSONDecoder().decode(PackageTypeEnvelope.self, from: data)
if envelope.type == "residence" {
return .residence
}
} catch {
// Default to contractor on error
}
return .contractor
}
}