|
@@ -11,9 +11,9 @@ enum MockJobListings {
|
|
|
let day: TimeInterval = 86_400
|
|
let day: TimeInterval = 86_400
|
|
|
|
|
|
|
|
/// Interim demo URLs — real `jk` keys come from a licensed feed later.
|
|
/// Interim demo URLs — real `jk` keys come from a licensed feed later.
|
|
|
- /// Browse/search URLs open live Indeed results instead of expired viewjob pages.
|
|
|
|
|
- func url(title: String, location: String) -> URL {
|
|
|
|
|
- IndeedBrowseURLBuilder.searchURL(query: title, location: location)
|
|
|
|
|
|
|
+ /// Browse URLs include company so Open on Indeed does not land on a different employer.
|
|
|
|
|
+ func url(title: String, company: String, location: String) -> URL {
|
|
|
|
|
+ IndeedBrowseURLBuilder.searchURL(query: title, location: location, company: company)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
return [
|
|
@@ -28,7 +28,7 @@ enum MockJobListings {
|
|
|
salary: SalaryRange(min: 160_000, max: 220_000, currency: "USD", period: .year),
|
|
salary: SalaryRange(min: 160_000, max: 220_000, currency: "USD", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-day),
|
|
postedAt: now.addingTimeInterval(-day),
|
|
|
snippet: "Build delightful iOS experiences with SwiftUI and UIKit for millions of users.",
|
|
snippet: "Build delightful iOS experiences with SwiftUI and UIKit for millions of users.",
|
|
|
- indeedURL: url(title: "Senior iOS Developer", location: "Cupertino, CA"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Senior iOS Developer", company: "Apple", location: "Cupertino, CA"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "apple.logo"
|
|
logoSymbol: "apple.logo"
|
|
@@ -37,14 +37,14 @@ enum MockJobListings {
|
|
|
indeedJobKey: "ios002",
|
|
indeedJobKey: "ios002",
|
|
|
title: "iOS Developer",
|
|
title: "iOS Developer",
|
|
|
company: "Microsoft",
|
|
company: "Microsoft",
|
|
|
- location: "Remote",
|
|
|
|
|
|
|
+ location: "United States",
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
salary: SalaryRange(min: 120_000, max: 160_000, currency: "USD", period: .year),
|
|
salary: SalaryRange(min: 120_000, max: 160_000, currency: "USD", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-2 * day),
|
|
postedAt: now.addingTimeInterval(-2 * day),
|
|
|
snippet: "Join a distributed team shipping mobile productivity apps on iOS.",
|
|
snippet: "Join a distributed team shipping mobile productivity apps on iOS.",
|
|
|
- indeedURL: url(title: "iOS Developer", location: "Remote"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer", company: "Microsoft", location: "United States"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isUrgentlyHiring: true,
|
|
isUrgentlyHiring: true,
|
|
|
logoSymbol: "square.grid.2x2.fill"
|
|
logoSymbol: "square.grid.2x2.fill"
|
|
@@ -57,10 +57,10 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .junior,
|
|
experienceLevel: .junior,
|
|
|
- salary: SalaryRange(min: 30_000, max: 48_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 1_200_000, max: 2_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-3 * day),
|
|
postedAt: now.addingTimeInterval(-3 * day),
|
|
|
snippet: "Develop and maintain customer-facing iOS applications.",
|
|
snippet: "Develop and maintain customer-facing iOS applications.",
|
|
|
- indeedURL: url(title: "Mobile Software Engineer (iOS)", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Mobile Software Engineer (iOS)", company: "Alorica", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "phone.fill"
|
|
logoSymbol: "phone.fill"
|
|
|
),
|
|
),
|
|
@@ -72,10 +72,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 40_000, max: 65_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_400_000, max: 3_800_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-4 * day),
|
|
postedAt: now.addingTimeInterval(-4 * day),
|
|
|
snippet: "Own features end-to-end for the Careem rider and captain apps.",
|
|
snippet: "Own features end-to-end for the Careem rider and captain apps.",
|
|
|
- indeedURL: url(title: "iOS Engineer", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Engineer", company: "Careem", location: "Lahore, Pakistan"),
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "car.fill"
|
|
logoSymbol: "car.fill"
|
|
|
),
|
|
),
|
|
@@ -87,10 +87,10 @@ enum MockJobListings {
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
- salary: SalaryRange(min: 55_000, max: 85_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 3_200_000, max: 5_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-5 * day),
|
|
postedAt: now.addingTimeInterval(-5 * day),
|
|
|
snippet: "Lead iOS architecture and mentor a growing mobile team.",
|
|
snippet: "Lead iOS architecture and mentor a growing mobile team.",
|
|
|
- indeedURL: url(title: "Senior Mobile Developer", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Senior Mobile Developer", company: "Bykea", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isUrgentlyHiring: true,
|
|
isUrgentlyHiring: true,
|
|
|
logoSymbol: "bicycle"
|
|
logoSymbol: "bicycle"
|
|
@@ -103,10 +103,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 48_000, max: 75_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_800_000, max: 4_200_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-6 * day),
|
|
postedAt: now.addingTimeInterval(-6 * day),
|
|
|
snippet: "Ship modern SwiftUI interfaces for enterprise AI products.",
|
|
snippet: "Ship modern SwiftUI interfaces for enterprise AI products.",
|
|
|
- indeedURL: url(title: "SwiftUI Developer", location: "Islamabad, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "SwiftUI Developer", company: "Afiniti", location: "Islamabad, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "sparkles"
|
|
logoSymbol: "sparkles"
|
|
|
),
|
|
),
|
|
@@ -118,10 +118,10 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .entry,
|
|
experienceLevel: .entry,
|
|
|
- salary: SalaryRange(min: 18_000, max: 28_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 900_000, max: 1_500_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-7 * day),
|
|
postedAt: now.addingTimeInterval(-7 * day),
|
|
|
snippet: "Learn production iOS development with senior mentors.",
|
|
snippet: "Learn production iOS development with senior mentors.",
|
|
|
- indeedURL: url(title: "Junior iOS Developer", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Junior iOS Developer", company: "Systems Limited", location: "Lahore, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "desktopcomputer"
|
|
logoSymbol: "desktopcomputer"
|
|
|
),
|
|
),
|
|
@@ -133,10 +133,11 @@ enum MockJobListings {
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .contract,
|
|
employmentType: .contract,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
|
|
+ // Cross-border contract often quoted in USD/hour.
|
|
|
salary: SalaryRange(min: 35, max: 55, currency: "USD", period: .hour),
|
|
salary: SalaryRange(min: 35, max: 55, currency: "USD", period: .hour),
|
|
|
postedAt: now.addingTimeInterval(-8 * day),
|
|
postedAt: now.addingTimeInterval(-8 * day),
|
|
|
snippet: "6-month contract building a consumer fintech iOS app.",
|
|
snippet: "6-month contract building a consumer fintech iOS app.",
|
|
|
- indeedURL: url(title: "iOS Contractor", location: "Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Contractor", company: "Remote Team Co", location: "Pakistan"),
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "globe"
|
|
logoSymbol: "globe"
|
|
|
),
|
|
),
|
|
@@ -148,10 +149,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
- salary: SalaryRange(min: 70_000, max: 95_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 4_000_000, max: 6_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-9 * day),
|
|
postedAt: now.addingTimeInterval(-9 * day),
|
|
|
snippet: "Drive mobile platform strategy for Pakistan’s top marketplace.",
|
|
snippet: "Drive mobile platform strategy for Pakistan’s top marketplace.",
|
|
|
- indeedURL: url(title: "Lead iOS Engineer", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Lead iOS Engineer", company: "Daraz", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "cart.fill"
|
|
logoSymbol: "cart.fill"
|
|
@@ -160,28 +161,28 @@ enum MockJobListings {
|
|
|
indeedJobKey: "ios010",
|
|
indeedJobKey: "ios010",
|
|
|
title: "iOS Developer (Part-time)",
|
|
title: "iOS Developer (Part-time)",
|
|
|
company: "EduTech PK",
|
|
company: "EduTech PK",
|
|
|
- location: "Remote, Pakistan",
|
|
|
|
|
|
|
+ location: "Pakistan",
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .partTime,
|
|
employmentType: .partTime,
|
|
|
experienceLevel: .junior,
|
|
experienceLevel: .junior,
|
|
|
- salary: SalaryRange(min: 12_000, max: 20_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 600_000, max: 1_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-10 * day),
|
|
postedAt: now.addingTimeInterval(-10 * day),
|
|
|
snippet: "Part-time role improving an education app for students.",
|
|
snippet: "Part-time role improving an education app for students.",
|
|
|
- indeedURL: url(title: "iOS Developer (Part-time)", location: "Remote, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer (Part-time)", company: "EduTech PK", location: "Pakistan"),
|
|
|
logoSymbol: "book.fill"
|
|
logoSymbol: "book.fill"
|
|
|
),
|
|
),
|
|
|
JobListing(
|
|
JobListing(
|
|
|
indeedJobKey: "ios011",
|
|
indeedJobKey: "ios011",
|
|
|
title: "macOS / iOS Engineer",
|
|
title: "macOS / iOS Engineer",
|
|
|
company: "Cursor Labs",
|
|
company: "Cursor Labs",
|
|
|
- location: "Remote",
|
|
|
|
|
|
|
+ location: "United States",
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
salary: SalaryRange(min: 90_000, max: 130_000, currency: "USD", period: .year),
|
|
salary: SalaryRange(min: 90_000, max: 130_000, currency: "USD", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-1.5 * day),
|
|
postedAt: now.addingTimeInterval(-1.5 * day),
|
|
|
snippet: "Build native Apple platform tools with Swift concurrency.",
|
|
snippet: "Build native Apple platform tools with Swift concurrency.",
|
|
|
- indeedURL: url(title: "macOS / iOS Engineer", location: "Remote"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "macOS / iOS Engineer", company: "Cursor Labs", location: "United States"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "laptopcomputer"
|
|
logoSymbol: "laptopcomputer"
|
|
@@ -194,10 +195,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 42_000, max: 60_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_200_000, max: 3_400_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-11 * day),
|
|
postedAt: now.addingTimeInterval(-11 * day),
|
|
|
snippet: "Secure mobile payments experience for millions of users.",
|
|
snippet: "Secure mobile payments experience for millions of users.",
|
|
|
- indeedURL: url(title: "iOS Developer", location: "Islamabad, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer", company: "JazzCash", location: "Islamabad, Pakistan"),
|
|
|
isUrgentlyHiring: true,
|
|
isUrgentlyHiring: true,
|
|
|
logoSymbol: "creditcard.fill"
|
|
logoSymbol: "creditcard.fill"
|
|
|
),
|
|
),
|
|
@@ -209,10 +210,11 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
|
|
+ // Pay not published — omit salary rather than inventing currency/amount.
|
|
|
salary: nil,
|
|
salary: nil,
|
|
|
postedAt: now.addingTimeInterval(-12 * day),
|
|
postedAt: now.addingTimeInterval(-12 * day),
|
|
|
snippet: "Client projects spanning healthcare and fintech iOS apps.",
|
|
snippet: "Client projects spanning healthcare and fintech iOS apps.",
|
|
|
- indeedURL: url(title: "Swift Developer", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Swift Developer", company: "10Pearls", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "hammer.fill"
|
|
logoSymbol: "hammer.fill"
|
|
|
),
|
|
),
|
|
@@ -224,10 +226,10 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .internship,
|
|
employmentType: .internship,
|
|
|
experienceLevel: .entry,
|
|
experienceLevel: .entry,
|
|
|
- salary: SalaryRange(min: 400, max: 600, currency: "USD", period: .month),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 40_000, max: 70_000, currency: "PKR", period: .month),
|
|
|
postedAt: now.addingTimeInterval(-2 * day),
|
|
postedAt: now.addingTimeInterval(-2 * day),
|
|
|
snippet: "Paid internship focused on Swift and SwiftUI fundamentals.",
|
|
snippet: "Paid internship focused on Swift and SwiftUI fundamentals.",
|
|
|
- indeedURL: url(title: "iOS Intern", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Intern", company: "Arbisoft", location: "Lahore, Pakistan"),
|
|
|
logoSymbol: "graduationcap.fill"
|
|
logoSymbol: "graduationcap.fill"
|
|
|
),
|
|
),
|
|
|
JobListing(
|
|
JobListing(
|
|
@@ -238,10 +240,10 @@ enum MockJobListings {
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
- salary: SalaryRange(min: 60_000, max: 90_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 3_500_000, max: 5_500_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-0.5 * day),
|
|
postedAt: now.addingTimeInterval(-0.5 * day),
|
|
|
snippet: "Remote-first team building consumer apps for global clients.",
|
|
snippet: "Remote-first team building consumer apps for global clients.",
|
|
|
- indeedURL: url(title: "Senior iOS Developer", location: "Islamabad, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Senior iOS Developer", company: "Emumba", location: "Islamabad, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "antenna.radiowaves.left.and.right"
|
|
logoSymbol: "antenna.radiowaves.left.and.right"
|
|
@@ -254,10 +256,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 38_000, max: 58_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_000_000, max: 3_200_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-14 * day),
|
|
postedAt: now.addingTimeInterval(-14 * day),
|
|
|
snippet: "Improve ordering flows and performance on iOS.",
|
|
snippet: "Improve ordering flows and performance on iOS.",
|
|
|
- indeedURL: url(title: "Mobile Engineer", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Mobile Engineer", company: "Foodpanda", location: "Lahore, Pakistan"),
|
|
|
logoSymbol: "fork.knife"
|
|
logoSymbol: "fork.knife"
|
|
|
),
|
|
),
|
|
|
JobListing(
|
|
JobListing(
|
|
@@ -268,10 +270,10 @@ enum MockJobListings {
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 40_000, max: 55_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: nil,
|
|
|
postedAt: now.addingTimeInterval(-30 * day),
|
|
postedAt: now.addingTimeInterval(-30 * day),
|
|
|
snippet: "This listing is no longer accepting applications.",
|
|
snippet: "This listing is no longer accepting applications.",
|
|
|
- indeedURL: url(title: "iOS Developer (Unavailable)", location: "Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer (Unavailable)", company: "Closed Co", location: "Pakistan"),
|
|
|
availability: .unavailable,
|
|
availability: .unavailable,
|
|
|
logoSymbol: "xmark.circle.fill"
|
|
logoSymbol: "xmark.circle.fill"
|
|
|
),
|
|
),
|
|
@@ -279,14 +281,14 @@ enum MockJobListings {
|
|
|
indeedJobKey: "ios018",
|
|
indeedJobKey: "ios018",
|
|
|
title: "Temporary iOS Support Engineer",
|
|
title: "Temporary iOS Support Engineer",
|
|
|
company: "Helpdesk Inc",
|
|
company: "Helpdesk Inc",
|
|
|
- location: "Remote, Pakistan",
|
|
|
|
|
|
|
+ location: "Pakistan",
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .temporary,
|
|
employmentType: .temporary,
|
|
|
experienceLevel: .junior,
|
|
experienceLevel: .junior,
|
|
|
salary: SalaryRange(min: 25, max: 35, currency: "USD", period: .hour),
|
|
salary: SalaryRange(min: 25, max: 35, currency: "USD", period: .hour),
|
|
|
postedAt: now.addingTimeInterval(-3.5 * day),
|
|
postedAt: now.addingTimeInterval(-3.5 * day),
|
|
|
snippet: "Short-term engagement supporting crash triage and hotfixes.",
|
|
snippet: "Short-term engagement supporting crash triage and hotfixes.",
|
|
|
- indeedURL: url(title: "Temporary iOS Support Engineer", location: "Remote, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Temporary iOS Support Engineer", company: "Helpdesk Inc", location: "Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "wrench.and.screwdriver.fill"
|
|
logoSymbol: "wrench.and.screwdriver.fill"
|
|
|
),
|
|
),
|
|
@@ -298,10 +300,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
- salary: SalaryRange(min: 100_000, max: 140_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 5_500_000, max: 8_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-15 * day),
|
|
postedAt: now.addingTimeInterval(-15 * day),
|
|
|
snippet: "Define multi-app mobile architecture and CI/CD standards.",
|
|
snippet: "Define multi-app mobile architecture and CI/CD standards.",
|
|
|
- indeedURL: url(title: "Principal iOS Architect", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Principal iOS Architect", company: "Netsol", location: "Lahore, Pakistan"),
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "building.columns.fill"
|
|
logoSymbol: "building.columns.fill"
|
|
|
),
|
|
),
|
|
@@ -313,10 +315,10 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 35_000, max: 52_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 1_800_000, max: 2_800_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-4.5 * day),
|
|
postedAt: now.addingTimeInterval(-4.5 * day),
|
|
|
snippet: "Collaborate with product and design on high-quality apps.",
|
|
snippet: "Collaborate with product and design on high-quality apps.",
|
|
|
- indeedURL: url(title: "iOS Developer", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer", company: "VentureDive", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isUrgentlyHiring: true,
|
|
isUrgentlyHiring: true,
|
|
|
logoSymbol: "person.3.fill"
|
|
logoSymbol: "person.3.fill"
|
|
@@ -329,10 +331,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 40_000, max: 62_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_200_000, max: 3_600_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-6.5 * day),
|
|
postedAt: now.addingTimeInterval(-6.5 * day),
|
|
|
snippet: "Hybrid role with native iOS modules and React Native.",
|
|
snippet: "Hybrid role with native iOS modules and React Native.",
|
|
|
- indeedURL: url(title: "React Native / iOS Engineer", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "React Native / iOS Engineer", company: "Confiz", location: "Lahore, Pakistan"),
|
|
|
logoSymbol: "arrow.triangle.2.circlepath"
|
|
logoSymbol: "arrow.triangle.2.circlepath"
|
|
|
),
|
|
),
|
|
|
JobListing(
|
|
JobListing(
|
|
@@ -343,10 +345,10 @@ enum MockJobListings {
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 32_000, max: 48_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 1_600_000, max: 2_500_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-7.5 * day),
|
|
postedAt: now.addingTimeInterval(-7.5 * day),
|
|
|
snippet: "Automate XCUITest suites for mobile release quality.",
|
|
snippet: "Automate XCUITest suites for mobile release quality.",
|
|
|
- indeedURL: url(title: "iOS QA Automation Engineer", location: "Karachi, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS QA Automation Engineer", company: "Folio3", location: "Karachi, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
logoSymbol: "checkmark.seal.fill"
|
|
logoSymbol: "checkmark.seal.fill"
|
|
|
),
|
|
),
|
|
@@ -358,10 +360,10 @@ enum MockJobListings {
|
|
|
remoteType: .hybrid,
|
|
remoteType: .hybrid,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .senior,
|
|
experienceLevel: .senior,
|
|
|
- salary: SalaryRange(min: 85_000, max: 120_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 4_500_000, max: 7_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-0.8 * day),
|
|
postedAt: now.addingTimeInterval(-0.8 * day),
|
|
|
snippet: "Own fleet-management mobile experiences at scale.",
|
|
snippet: "Own fleet-management mobile experiences at scale.",
|
|
|
- indeedURL: url(title: "Staff iOS Engineer", location: "Islamabad, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Staff iOS Engineer", company: "KeepTruckin", location: "Islamabad, Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
logoSymbol: "truck.box.fill"
|
|
logoSymbol: "truck.box.fill"
|
|
@@ -374,24 +376,24 @@ enum MockJobListings {
|
|
|
remoteType: .onsite,
|
|
remoteType: .onsite,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .junior,
|
|
experienceLevel: .junior,
|
|
|
- salary: SalaryRange(min: 22_000, max: 35_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 1_000_000, max: 1_800_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-9.5 * day),
|
|
postedAt: now.addingTimeInterval(-9.5 * day),
|
|
|
snippet: "Work on game-adjacent and consumer product iOS apps.",
|
|
snippet: "Work on game-adjacent and consumer product iOS apps.",
|
|
|
- indeedURL: url(title: "iOS Developer", location: "Lahore, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "iOS Developer", company: "Tintash", location: "Lahore, Pakistan"),
|
|
|
logoSymbol: "gamecontroller.fill"
|
|
logoSymbol: "gamecontroller.fill"
|
|
|
),
|
|
),
|
|
|
JobListing(
|
|
JobListing(
|
|
|
indeedJobKey: "ios025",
|
|
indeedJobKey: "ios025",
|
|
|
title: "Remote iOS Developer",
|
|
title: "Remote iOS Developer",
|
|
|
company: "Global Soft",
|
|
company: "Global Soft",
|
|
|
- location: "Remote, Pakistan",
|
|
|
|
|
|
|
+ location: "Pakistan",
|
|
|
remoteType: .remote,
|
|
remoteType: .remote,
|
|
|
employmentType: .fullTime,
|
|
employmentType: .fullTime,
|
|
|
experienceLevel: .mid,
|
|
experienceLevel: .mid,
|
|
|
- salary: SalaryRange(min: 50_000, max: 78_000, currency: "USD", period: .year),
|
|
|
|
|
|
|
+ salary: SalaryRange(min: 2_500_000, max: 4_000_000, currency: "PKR", period: .year),
|
|
|
postedAt: now.addingTimeInterval(-1.2 * day),
|
|
postedAt: now.addingTimeInterval(-1.2 * day),
|
|
|
snippet: "Fully remote role building banking apps with Swift.",
|
|
snippet: "Fully remote role building banking apps with Swift.",
|
|
|
- indeedURL: url(title: "Remote iOS Developer", location: "Remote, Pakistan"),
|
|
|
|
|
|
|
+ indeedURL: url(title: "Remote iOS Developer", company: "Global Soft", location: "Pakistan"),
|
|
|
isEasyApply: true,
|
|
isEasyApply: true,
|
|
|
isFeatured: true,
|
|
isFeatured: true,
|
|
|
isUrgentlyHiring: true,
|
|
isUrgentlyHiring: true,
|