POST
|
Hi @KamalSharma, I'm assuming that app is using the persistent credential stores. If yes, you should execute these lines immediately after the code line which sets the persistent stores for persisted credentials to be removed. await ArcGISEnvironment.authenticationManager.revokeOAuthTokens()
await ArcGISEnvironment.authenticationManager.clearCredentialStores() If above suggestion does not resolve issue then please provide detailed steps to reproduce the issue along with code. Regards, Nimesh
... View more
04-22-2025
08:08 AM
|
0
|
0
|
252
|
POST
|
Hi @AfrozAlam,
Thank you for responding to my questions and providing the code.
Based on the function private func queryZone(_ zn: String), you are passing the zone value as string. If the field type is esriFieldTypeString in the service then you have to provide the single quote. You can check this string query for GFCODE = 'PDGVZONE' vs the ZONE_NO = 54. The query for the field type esriFieldTypeSmallInteger does not require single quote.
By any chance the 10.9.1 service was published with ZONE_NO as esriFieldTypeString but 11.3 service with ZONE_NO as esriFieldTypeSmallInteger?
Regards,
Nimesh
... View more
12-05-2024
09:57 AM
|
0
|
0
|
709
|
POST
|
Hi @AfrozAlam,
Sorry to hear that you are running into the issues. I looked at the attached pdf and have few questions,
1. Are you building the query or is it build by some of the SDK functionality? Some sample code would help.
2. If I remove the quotes from the query value then it works (ZONE_NO = '54' -> ZONE_NO = 54). I'll have to go back and check whether quotes were expected for 10.9.1.
https://services.gisqatar.org.qa/server/rest/services/Vector/ZonesE/MapServer/0/query?where=ZONE_NO+%3D+54&text=&objectIds=&time=&timeRelation=esriTimeRelationOverlaps&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&distance=&units=esriSRUnit_Foot&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=2932&havingClause=&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=true&returnM=true&gdbVersion=&historicMoment=&returnDistinctValues=false&resultOffset=&resultRecordCount=&returnExtentOnly=false&sqlFormat=none&datumTransformation=¶meterValues=&rangeValues=&quantizationParameters=&featureEncoding=esriDefault&f=html
3. Did you just upgrade the server from 10.9.1 to 11.3 or recreated services after installing 11.3?
Regards,
Nimesh
... View more
12-02-2024
08:21 AM
|
0
|
2
|
751
|
POST
|
Hi @RTC,
If you could provide examples of the v100 and v200 codes/URLs, I would be able to assist you in identifying why it was working in v100 and not in v200.
Regards,
Nimesh
... View more
11-18-2024
01:33 PM
|
0
|
0
|
705
|
POST
|
Hi @RTC,
Sorry to hear that you are running into this issue. The error means the url of the credential is not matching with the layer url.
Can you please check the serverContext url of the credential and url of the ServiceFeatureTable and post it here?
Regards,
Nimesh
... View more
11-18-2024
12:33 PM
|
1
|
3
|
718
|
POST
|
Hi @RTC,
Do you see your framework or ArcGIS framework listed under `Frameworks, Libraries, and Embedded Content` in Xcode project? If not, try adding it.
Regards,
Nimesh
... View more
09-27-2024
08:29 AM
|
0
|
3
|
1837
|
POST
|
Hi @DuanePfeiffer,
I'm glad to hear that the issue has been resolved! Could you please share the details or steps from the blog that led to the problem? Understanding this will help us investigate further and make any necessary corrections.
Thank you!
Regards,
Nimesh
... View more
09-24-2024
03:59 PM
|
0
|
0
|
619
|
POST
|
Hi @DuanePfeiffer,
Did you try the steps outlined in the blog post to reconfigure the SAML on your organization account? Can you please post your code and steps to follow to reproduce the issue?
Thank you.
Regards,
Nimesh
... View more
09-24-2024
03:28 PM
|
0
|
0
|
626
|
POST
|
Hi @zdtorok, To build your understanding of how secured resources work, let's go through the process step-by-step. Creating credentials does not trigger an authentication challenge in your EsriChallengeHandler. Therefore, you should remove the following code: Task {
do {
let oAuthUserCredential = try await OAuthUserCredential.credential(for: oAuthUserConfig)
} catch {
print(" >> Error obtaining OAuthUserCredential: \(error)")
}
} An authentication challenge is issued when accessing secured resources such as a portal, portal item, or layer. You create a credential to fulfill this authentication challenge. The credentials provided during the challenge are added to the credential store by the SDK, so subsequent requests from the same source URL will reuse them. Here is the workflow you should try: 1. Set Persistent Credential Store and Challenge Handler: At the start of the application, set the persistent credential store and challenge handler on ArcGISEnvironment.authenticationManager. let oAuthUserConfig = OAuthUserConfiguration(portalURL: portalUrl, clientID: authConfig.clientId, redirectURL: redirectUrl)
ArcGISEnvironment.authenticationManager.arcGISAuthenticationChallengeHandler = EsriChallengeHandler(oAuthUserConfigurations: [oAuthUserConfig])
ArcGISEnvironment.authenticationManager.arcGISCredentialStore = try await .makePersistent(access: .afterFirstUnlockThisDeviceOnly, synchronizesWithiCloud: true) 2. Create and Load a Portal: Create and load a portal, which should issue an authentication challenge. let portal = Portal(url: portalUrl, connection: .authenticated)
try await portal.load() 3. Credential Storage: The portal is loaded using the provided credential from the authentication challenge, and the credential is stored. The credential creation shows you the login view to enter the username and password. 4. App Restart: Close and re-open the app, which will reinitialize the challenge handler and persistent store. 5. Credential Retrieval: When the persistent store is set, the SDK loads credentials from the keychain into the credential store. You should see the credential available in the store. 6. Portal Loading: The app will attempt to load the portal again. It will find the credential in the store and reuse it, allowing the portal to load without issuing a new authentication challenge. I would recommend using Authenticator toolkit component which takes care of showing user interface for different authentication types and handle all the complexity. You can look at this example to know see how challenge handlers and persistent credential stores are setup. Hope this helps! Regards, Nimesh
... View more
07-29-2024
02:48 PM
|
0
|
0
|
658
|
POST
|
Hi @zdtorok , The credential store available here is just an in-memory credential store so they are available for the lifetime of that app session only. ArcGISEnvironment.authenticationManager.arcGISCredentialStore. If you want to persist the credentials between app sessions then you should create a persistent credential store and set on the authentication manager. ArcGISEnvironment.authenticationManager.arcGISCredentialStore = try await .makePersistent(
access: .afterFirstUnlockThisDeviceOnly,
synchronizesWithiCloud: true
) Please refer details in the documentation. Also, you do not need to store the credential in credential store explicitly. Since, you are providing credential while handling challenge, it will be added to credential store by the SDK. ArcGISEnvironment.authenticationManager.arcGISCredentialStore.add(credential) Hope this helps! Regards, Nimesh
... View more
07-22-2024
09:02 AM
|
0
|
2
|
750
|
POST
|
Hi @DominicBowyer2 , Thanks for providing your code. I cannot compile it but looks like the feature table loading step is missing. I would suggest altering the steps of the function as, 1. Load scene layer if not loaded 2. Get the feature table from scene layer 3. Load the feature table 4. Query the feature table. func extractMeshes(from sceneLayer: ArcGISSceneLayer) async {
// Ensure the layer is loaded
if sceneLayer.loadStatus != .loaded {
do {
try await sceneLayer.load()
print("Scene layer loaded: \(sceneLayer.name)")
} catch {
print("Error loading scene layer: \(error)")
return
}
}
guard let featureTable = sceneLayer.featureTable else {
print("No feature table found in the scene layer")
return
}
print("Feature table found: \(featureTable.tableName)")
// Ensure the table is loaded
if featureTable.loadStatus != .loaded {
do {
try await featureTable.load()
print("Feature table loaded: \(featureTable.tableName)")
} catch {
print("Error loading feature table: \(error)")
return
}
}
// Print the fields of the feature table
let fields = featureTable.fields
print("Feature table fields: \(fields.map { $0.name })")
// Adjust the query parameters
let query = QueryParameters()
query.whereClause = "1=1"
query.returnsGeometry = true
print("Query parameters set: \(query.whereClause)")
do {
let featureQueryResult = try await featureTable.queryFeatures(using: query)
let features = featureQueryResult.features()
let featuresArray = Array(features)
print("Number of features queried: \(featuresArray.count)")
for feature in featuresArray {
if let geometry = feature.geometry {
print("Extracted geometry from feature: \(geometry)")
if let node = createNode(for: geometry) {
let point = geometry.extent.center
print("Anchoring node at coordinate: (\(point.y), \(point.x)) with altitude \(String(describing: point.z))")
anchorNode(node, at: point)
}
}
}
} catch {
print("Error querying features: \(error)")
}
} Regards, Nimesh
... View more
07-22-2024
08:41 AM
|
0
|
0
|
1027
|
POST
|
Hi @JyoshnaRani , Thanks for providing additional information. As you spotted my response in another thread, the SDK does not support the proxy url format you are using. Regards. Nimesh
... View more
05-07-2024
09:49 AM
|
0
|
0
|
1304
|
POST
|
Hi @JyoshnaRani, Could you please provide more details about the type of proxy you want to set up and your specific use case? This will help me understand your requirements better and provide a more accurate and relevant response. Regards, Nimesh
... View more
05-03-2024
08:21 AM
|
0
|
2
|
1369
|
POST
|
Thanks Marvin for the update. I'm glad to know that your issue is resolved! Regards, Nimesh
... View more
04-17-2024
04:42 PM
|
0
|
0
|
1458
|
POST
|
Thanks for Marvin for information. It will be great if you can just provide a sample project which reproduce the issue so I can debug and see what is going on. Other important thing to note, SDK is able to display OAuth login page using the SafariViewController only if app has provided an `AGSOAuthConfiguration` instance in OAuthConfigurations property. Can you please check, comment out that code and retry? Regards, Nimesh
... View more
04-11-2024
08:47 AM
|
0
|
2
|
1497
|
Title | Kudos | Posted |
---|---|---|
1 | 11-18-2024 12:33 PM | |
1 | 03-12-2024 08:54 AM | |
1 | 09-28-2023 08:19 AM | |
2 | 07-28-2023 08:07 AM | |
1 | 06-27-2013 10:42 AM |
Online Status |
Offline
|
Date Last Visited |
06-26-2025
07:28 AM
|