To solve the given optimization problem using Gurobi, we first need to understand and possibly simplify or clarify the constraints provided:

1. The objective function is to maximize: `6.16 * bananas + 1.89 * apples`.
2. Constraints:
   - Dollar cost constraint (lower bound): `3 * bananas + 4 * apples >= 28`.
   - Fiber constraint (lower bound): `2 * bananas + 1 * apples >= 12`.
   - Linear constraint: `10 * bananas - 4 * apples >= 0`.
   - Dollar cost constraint (upper bound): `3 * bananas + 4 * apples <= 41` (noted twice, but essentially the same constraint).
   - Fiber constraint (upper bound): `2 * bananas + 1 * apples <= 29`.
   
Given that there doesn't have to be a whole number of bananas or apples, both variables are continuous.

Here is how we can represent this problem in Gurobi using Python:

```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Define the variables
bananas = m.addVar(vtype=GRB.CONTINUOUS, name="bananas")
apples = m.addVar(vtype=GRB.CONTINUOUS, name="apples")

# Set the objective function
m.setObjective(6.16 * bananas + 1.89 * apples, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3 * bananas + 4 * apples >= 28, "min_dollar_cost")
m.addConstr(2 * bananas + 1 * apples >= 12, "min_fiber")
m.addConstr(10 * bananas - 4 * apples >= 0, "linear_constraint")
m.addConstr(3 * bananas + 4 * apples <= 41, "max_dollar_cost")
m.addConstr(2 * bananas + 1 * apples <= 29, "max_fiber")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Bananas: {bananas.x}")
    print(f"Apples: {apples.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found.")
```